我最近从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;
编译和链接结果没有错误(关于指针滥用的大量警告,但我怀疑这是罪魁祸首)。
我目前没有关于如何调试它的想法。有人可以建议进一步的步骤吗?
答案 0 :(得分:2)