glewinit()显然是成功的,无论如何设置错误标志

时间:2012-12-26 20:50:32

标签: opengl opencl glew

我最近从Windows迁移到Linux(Debian,64位),我正在尝试启动并运行GPGPU开发环境,因此我正在测试一个在Windows下运行的程序。

编译和链接很好,但是当我运行程序时,我得到一些奇怪的错误。我正在使用glew和freeglut。

第一个代码段:仅限OpenGL

i = 1;
info = PROGRAM_NAME;
glutInitContextVersion(4,2);
glutInit(&i, &info);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(W_SIZEX, W_SIZEY);
glutInitWindowPosition(W_POSX, W_POSY);
glutCreateWindow(info);
glClearColor(1.0,1.0,1.0,0);
/**/
printf("Before glewInit: %i\n", glGetError());
/**/    
printf("glewInit returns: %i\n", glewInit());
/**/
printf("After glewInit: %i\n", glGetError());
/**/

我从中得到以下输出:

Before glewInit: 0
glewInit returns: 0
After glewInit: 1280

这是一个无效的枚举错误。我不知道是什么导致了它,但我怀疑它可能与我下次出现的错误有关,后来在程序的执行中。

第二个片段:OpenCL-OpenGL互操作

/* BUFFERS */
(*BFR).C[0] = clCreateBuffer(*CTX, CL_MEM_READ_WRITE, SD, 0, 0);
(*BFR).C[1] = clCreateBuffer(*CTX, CL_MEM_READ_WRITE, SD, 0, &i);
dcl(i);

glGenBuffers(2, (*BFR).G);

glBindBuffer(GL_ARRAY_BUFFER, (*BFR).G[0]);
glBufferData(GL_ARRAY_BUFFER, SI, 0, GL_DYNAMIC_DRAW);
(*BFR).D[0] = clCreateFromGLBuffer(*CTX, CL_MEM_WRITE_ONLY, (*BFR).G[0], &i);
dcl(i);
glBindBuffer(GL_ARRAY_BUFFER, 0);

这里,dcl(int)方法只解码CL错误代码。当我运行它时,我从clCreateFromGLBuffer()得到一个CL_INVALID_GL_OBJECT错误。但是,OpenGL在生成,绑定或解除绑定缓冲区方面没有问题。 OpenCL上下文显然是有效的,在创建或查询时不会产生任何错误。一切都适用于Windows 7 64位的VS2010。

编译详情

以下是相关内容:

/* OPENGL */
#include "GL/glew.h"
#include "GL/freeglut.h"

/* OPENCL */
#include "CL/cl.h"
#include "CL/cl_gl.h"

我正在使用GCC并像这样链接:

gcc -w -I./include CLGL.c -o ~/Templates/GOL-CLGL/run/a.out -lGLEW -lGLU -lglut -lGL -lOpenCL;

编译和链接结果没有错误(关于指针滥用的大量警告,但我怀疑这是罪魁祸首)。

我目前没有关于如何调试它的想法。有人可以建议进一步的步骤吗?

1 个答案:

答案 0 :(得分:2)

我最近也遇到过这个问题所以答案是:

OpenGL: glGetError() returns invalid enum after call to glewInit()

所以你可以抛弃那个错误。