23

私はGLEWとfreeglutを使用しています。何らかの理由で、glewInit()を呼び出した後、glewExperimental = GL_FALSEの場合でも、glGetError()はエラーコード1280を返します。

シェーダーをコンパイルできません。glGetProgramInfoLog()は「glLinkProgram()が呼び出される前にVertexシェーダーが正常にコンパイルされませんでした。リンクに失敗しました。」を返します。以前はシェーダーをコンパイルできました。

ドライバを再インストールしても効果はありませんでした。

これが私のコードです:

int main(int argc, char* argv[])
{
    GLenum GlewInitResult, res;

    InitWindow(argc, argv);

    res = glGetError(); // res = 0

    glewExperimental = GL_TRUE;
    GlewInitResult = glewInit();    

    fprintf(stdout, "ERROR: %s\n", glewGetErrorString(GlewInitResult)); // "No error"
    res = glGetError(); // res = 1280

    glutMainLoop();

    exit(EXIT_SUCCESS);
}

void InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(4, 0);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,
    GLUT_ACTION_GLUTMAINLOOP_RETURNS);

    glutInitWindowPosition(0, 0);
    glutInitWindowSize(CurrentWidth, CurrentHeight);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

    WindowHandle = glutCreateWindow(WINDOW_TITLE);

    GLenum errorCheckValue = glGetError();

    if (WindowHandle < 1)
    {
        fprintf(stderr, "ERROR: Could not create new rendering window.\n");
        exit(EXIT_FAILURE);
    }

    glutReshapeFunc(ResizeFunction);
    glutDisplayFunc(RenderFunction);
    glutIdleFunc(IdleFunction);
    glutTimerFunc(0, TimerFunction, 0);
    glutCloseFunc(Cleanup);
    glutKeyboardFunc(KeyboardFunction);
}

私が間違っていることは何ですか?

4

2 に答える 2

22

このwikiページのコメントを見ましたか?

http://www.opengl.org/wiki/OpenGL_Loading_Library

これが発生する理由が記載されており、「glewのバージョンによっては、glewExperimentalを指定した後でもGL_INVALID_ENUMが取得される場合があります」と記載されています。

他に問題がない限り、無視しても安全かもしれません。

于 2012-06-01T21:17:40.537 に答える
-2

グリューが正しく機能しないようです...私にとって最も簡単な解決策は、libepoxyを使用することでした。initは必要ありません。交換するだけ

#include <GL/glew.h>

#include <epoxy/gl.h>
#include <epoxy/glx.h>

そして、すべてのglewコードを削除します。gccを使用する場合は、「-lGLEW」を「-lepoxy」に置き換える必要もあります。それでおしまい。たとえば、私は次のようなものを持っています:

g++ main.cpp -lepoxy -lSDL2 -lSDL2_image -lSDL2_mixer -lglut -lGLU -o main

エポキシフラグを他の人より先に保つことが重要であるように思われます。

于 2015-03-24T04:12:18.817 に答える