启用深度测试{GL}错误1280

时间:2015-12-30 10:37:48

标签: c++ opengl error-handling

我正在写一个关于opengl应用程序的问题。

GLenum err = 0;
glEnable( GL_DEPTH_TEST );
err = glGetError();
if ( err != GL_NO_ERROR )
    printf( "Error: %s\n",glewGetErrorString( err ) );

上面的代码将未知错误打印到控制台,当我单步执行时,我得到了1280代码。我已经检查了glhnable的khron页面,并且枚举就在那里,那为什么会导致问题? 我查找了错误代码,这是一个无效的枚举,但这怎么可能?

2 个答案:

答案 0 :(得分:0)

您确定错误来自glEnable(GL_DEPTH_TEST);来电吗?

你可以试试这个:

PrintErrors();               // Test for previous error
glEnable(GL_DEPTH_TEST);
PrintErrors();

...

void PrintError() {
    GLenum err;
    for(;;) {
        err = glGetError();
        if (err == GL_NO_ERROR) break;
        printf("Error: %s\n", glewGetErrorString(err));
    }
}

答案 1 :(得分:0)

错误0x500 / 1280表示GL_INVALID_ENUM,这意味着不允许函数调用中的一个枚举器。显然,GL_DEPTH_TEST不应该发生这种情况,自从OpenGL 1.0以来glEnable允许这种情况。以下是可能发生这种情况的所有可能原因:

  1. 错误来自其他一些功能。在进行此调用之前,请确保已从队列中删除所有错误。你说你已经尝试过了;我只是在全面。
  2. 您的OpenGL加载库有问题。也许它给了GL_DEPTH_TEST错误的价值。 GL_DEPTH_TEST的值应为0x0B71。或者,它可能在glEnable中放错了函数。要对此进行测试,您可以调试到库的初始化函数,或者可以使用glIntercept或类似的工具来查看正在调用的函数。
  3. 驱动程序错误。要对此进行测试,请尝试将此启用(带错误检查)放在代码中的不同位置。它在哪里出错,在哪里出错?