OpenGL 创建 glShaderObject 时出现无效枚举错误

OpenGL Invalid enum error when creating glShaderObject

本文关键字:无效 枚举 错误 创建 glShaderObject OpenGL      更新时间:2023-10-16

我得到无效的枚举

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。有人已经遇到这个问题了吗?

这不是

一个实际的答案,但以评论的形式写太长了......我怀疑您没有在适当的硬件加速环境中运行。

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

#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: %sn",
           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