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 に答える