1

これをデバッグするにはどうすればよいですか?現時点では、OpenGL プロファイラーを使用しており、ログを出力して何が起こっているかを確認しています。ただし、エラーは別の場所で発生しているようで、問題の原因を特定する方法がわかりません。

私のコード:

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
4

1 に答える 1

1

これがすべての関連コードである場合は、を使用してVBOを再度削除することなく、ますます多くのVBOを生成しているglDeleteBuffer()ため、しばらくするとドライバーがパニックに陥る可能性があります。

同様の問題が発生し、誤ってVBOの描画と再作成を同時に行っていたため、VBOが多すぎるまで内部的に積み上げられていました。これにより、同じドライバ例外が発生し、画面がフリーズしたり、MacBookProが自動再起動したりしました。

とにかく、NVidiaドライバーはこのようにびっくりするべきではありません。それは残念だ。

于 2012-12-22T23:39:43.073 に答える