如何解决NVIDIA频道异常问题?

时间:2012-10-12 18:41:21

标签: opengl nvidia

我该如何调试?目前我正在使用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

1 个答案:

答案 0 :(得分:1)

如果这是您的所有相关代码,那么您正在生成越来越多的VBO,而不会使用glDeleteBuffer()再次删除它们,这可能会导致驱动程序在一段时间后发生混乱。

我有一个类似的问题,我不小心在同时绘制和重新创建VBO,它们内部堆叠起来直到有太多。这导致相同的驱动程序异常,冻结屏幕甚至自动重启我的MacBook Pro。

无论如何,NVidia驱动程序不应该这样吓坏。真是太遗憾了。