我该如何调试?目前我正在使用OpenGL Profiler,并打印日志以查看正在发生的事情。然而,似乎错误发生在其他地方,我不知道如何找出造成问题的原因。
我的代码:
vertexCount = 3;
GLfloat vertices[] = {
-1.0f, -1.0f,
1.0f, -1.0f,
-1.0f, 1.0f,
};
/* Create Buffer -- (I know this shoudn't be done every frame, but I wanted to be sure the buffer wasn't getting lost somehow */
GLuint buffer[1];
glGenBuffers(1, buffer);
// -- vertices
glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * vertexCount, &vertices, GL_STATIC_DRAW);
/* Render */
glBindBuffer(GL_ARRAY_BUFFER, buffer[0]);
glVertexAttribPointer(
0, /* attribute */
1, /* size */
GL_FLOAT, /* type */
GL_FALSE, /* normalized? */
sizeof(GLfloat)*2, /* stride */
(void*)0 /* array buffer offset */
);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, vertexCount);
glDisableVertexAttribArray(0);
if(glGetError())
NSLog(@"Error!");
else
NSLog(@"No error");
...和控制台日志:
10/12/12 2:34:26.000 PM kernel[0]: NVDA(OpenGL): Channel exception! exception type = 0xd = GR: SW Notify Error
10/12/12 2:34:26.000 PM kernel[0]: IOVendorGLContext::ReportGPURestart
10/12/12 2:34:26.000 PM kernel[0]: 0000006e
10/12/12 2:34:26.000 PM kernel[0]: 00100000 00008597 00000474 00000000
10/12/12 2:34:26.000 PM kernel[0]: 0000047e 00000904 00008000 0000000e
10/12/12 2:34:26.000 PM kernel[0]: 00000000 00000000 00000000
10/12/12 2:34:26.000 PM kernel[0]: 00000000 0000000c
答案 0 :(得分:1)
如果这是您的所有相关代码,那么您正在生成越来越多的VBO,而不会使用glDeleteBuffer()
再次删除它们,这可能会导致驱动程序在一段时间后发生混乱。
我有一个类似的问题,我不小心在同时绘制和重新创建VBO,它们内部堆叠起来直到有太多。这导致相同的驱动程序异常,冻结屏幕甚至自动重启我的MacBook Pro。
无论如何,NVidia驱动程序不应该这样吓坏。真是太遗憾了。