Opengl glewinit()显然成功,但仍设置了错误标志
我最近从Windows迁移到Linux(Debian,64位),并试图建立一个GPGPU开发环境并运行,因此我正在测试一个在Windows下工作的程序 编译和链接进行得很顺利,但当我运行程序时,会出现一些奇怪的错误。我正在使用glew和freeglut 第一段:仅限OpenGLOpengl glewinit()显然成功,但仍设置了错误标志,opengl,opencl,glew,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
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 interop
/* 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_对象错误。但是,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;
编译和链接不会导致错误(大量关于指针滥用的警告,但我怀疑这是罪魁祸首)
我目前没有办法调试这个。有人能提出进一步的建议吗?我最近也遇到了这个问题,所以下面是答案:
所以你可以放弃这个错误。明白了。因此,可能是其他原因导致了无效的\u GL\u对象错误。是的,这是另一个原因。我通常在GL API方法之间注入getError(),直到我确定错误的来源。试试看:)修复了问题!不确定是什么问题,但清除libopencl、fglrx和所有相关软件包,然后安装最新的AMD catalyst,然后使用AMD的脚本安装AMD应用程序SDK是可行的。在此之前,我从debian存储库安装了fglrx和libopencl。因此,对于它可能关心的人来说,不要管存储库,而是使用AMD的脚本进行安装。