0

我得到了无效的枚举数

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()函数之后产生了错误。

我在带有 NVidia 驱动程序的 Ubuntu 12.04 上使用 glew 1.9.0 和 GLUT。有没有人已经有这个问题?

4

1 回答 1

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
于 2013-09-18T16:24:58.970 回答