创建glShaderObject时OpenGL无效的枚举错误

时间:2013-09-18 08:31:14

标签: c++ opengl glut glew

我收到无效的枚举

GL Error #1280(invalid enumerant)

错误,代码如下:

CHECK_GL_ERROR();
glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
CHECK_GL_ERROR();

其中CHECK_GL_ERROR()宏的定义如下:

int CheckGLError(char *file, int line)
{  GLenum glErr;
    int    retCode = 0;

    glErr = glGetError();
    while (glErr != GL_NO_ERROR)
    {  const GLubyte* sError = gluErrorString(glErr);

        if (sError)
            cerr << "GL Error #" << glErr << "(" << gluErrorString(glErr) << ") " << " in File " << file << " at line: " << line << endl;
        else
            cerr << "GL Error #" << glErr << " (no message available)" << " in File " << file << " at line: " << line << endl;

        retCode = 1;
        glErr = glGetError();
    }
    return retCode;
}

#define CHECK_GL_ERROR() CheckGLError(__FILE__, __LINE__)

我确定问题是由glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB)生成的,因为我已经检查了第一行没有生成错误的断点,但是在glCreateShaderObjectARB()函数之后生成了错误。

我在Ubuntu 12.04上使用glew 1.9.0和GLUT以及NVidia驱动程序。有人有过这个问题吗?

1 个答案:

答案 0 :(得分:0)

这不是一个真正的答案,但是以评论的形式写作会太久......我怀疑你没有在正确的硬件加速环境中运行。

您是否可以将以下代码添加到您的程序中并将输出包含在您的问题中?

#include <cstdio>

...

const GLubyte* vendor   = glGetString (GL_VENDOR);
const GLubyte* renderer = glGetString (GL_RENDERER);
const GLubyte* version  = glGetString (GL_VERSION);
const GLubyte* glsl_ver = glGetString (GL_SHADING_LANGUAGE_VERSION);

printf ( "%s : %s (%s)\n >> GLSL: %s\n",
           vendor,
             renderer,
               version,
                 glsl_ver );

它应该产生这样的输出(来自我的OS X 10.6笔记本电脑):

NVIDIA Corporation : NVIDIA GeForce GT 330M OpenGL Engine (2.1 NVIDIA-1.6.36)
 >> GLSL: 1.20