Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建glShaderObject时出现OpenGL无效枚举错误_C++_Opengl_Glut_Glew - Fatal编程技术网

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

C++ 创建glShaderObject时出现OpenGL无效枚举错误,c++,opengl,glut,glew,C++,Opengl,Glut,Glew,我得到了无效的枚举数 GL Error #1280(invalid enumerant) 错误代码如下: CHECK_GL_ERROR(); glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); CHECK_GL_ERROR(); 其中CHECK\u GL\u ERROR()宏定义如下: int CheckGLError(char *file, int line) { GLenum glErr; int retCode = 0;

我得到了无效的枚举数

GL Error #1280(invalid enumerant)
错误代码如下:

CHECK_GL_ERROR();
glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
CHECK_GL_ERROR();
其中
CHECK\u GL\u 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__)
int checklerror(字符*文件,int行)
{GLenum glErr;
int-retCode=0;
glErr=glGetError();
while(glErr!=GL\u无错误)
{const GLubyte*sError=gluErrorString(glErr);
if(sError)

cerr这不是一个实际的答案,但以评论的形式写太长了……我怀疑你没有在正确的硬件加速环境中运行

你能把下面的代码添加到你的程序中并把输出包含在你的问题中吗

#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 );

糟糕!不要使用GLSL的ARB扩展,使用core GLSL。它在OpenGL 2.0中使用了core。那么我应该将函数更改为:
glCreateShaderObject(GL_VERTEX_SHADER);
?不,该函数名为
glCreateShader
(末尾没有对象),调用将是
glCreateShader(GL_VERTEX_SHADER)
。我认为您用
…Object
作为后缀是它失败的部分原因。与
glCreateShader(GL\u VERTEX\u SHADER)相同的错误;
…奇怪如果这是用于检测GL错误的宏/函数组合,为什么不打印文件/行号?这将是有用的信息,因为目前有两个地方会发生此检查,我们无法知道错误是在调用
glCreateShader(…)之前还是之后生成的
NVIDIA Corporation : NVIDIA GeForce GT 330M OpenGL Engine (2.1 NVIDIA-1.6.36)
 >> GLSL: 1.20