2012-06-01 8 views
19

Ich benutze GLEW und freeglut. Aus irgendeinem Grund gibt glGetError() nach einem Aufruf von glewInit() den Fehlercode 1280 zurück, sogar mit glewExperimental = GL_FALSE.OpenGL: glGetError() gibt ungültige enum nach Aufruf von glewInit()

Ich kann die Shader nicht kompilieren, glGetProgramInfoLog() gibt "Vertex Shader (s) wurden nicht erfolgreich kompiliert, bevor glLinkProgram() aufgerufen wurde. Link fehlgeschlagen." Ich konnte die Shader vorher kompilieren.

Neuinstallation der Treiber hat nicht geholfen.

Hier ist mein Code:

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

Was mache ich falsch?

+0

Machst du irgendetwas mit GlewInitResult? Vielleicht solltest du glewGetErrorString anstelle von glGetError aufrufen (zum Erkennen von Problemen) – Tim

+0

Ich mache nichts mit GlewInitResult. glewGetErrorString gibt "Kein Fehler" zurück. – Martin

Antwort

20

Haben Sie den Kommentar auf dieser Wiki-Seite gesehen?

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

Es erwähnt, warum dies der Fall ist, und es sagt, „in einigen Fällen Sie noch GL_INVALID_ENUM nach Angabe glewExperimental je nach glew Version bekommen kann“.

Es klingt, als könnte es sicher ignoriert werden, solange Sie keine anderen Probleme sehen.

+0

Ich habe versucht, die Zeile zu kommentieren, ich bekomme immer noch ungültige Enum. Ich kann Shader nicht kompilieren, glGetProgramInfoLog() gibt "Vertex Shader (s) wurden nicht erfolgreich kompiliert, bevor glLinkProgram() aufgerufen wurde. Link fehlgeschlagen." – Martin

+4

Sie sollten die Shader überprüfen, bevor Sie versuchen, das Programm zu verknüpfen: glGetShaderiv (GL_COMPILE_STATUS) und glGetShaderInfoLog(). Das wird Ihnen sagen, warum sie nicht kompilieren können. @malymato – Tim

+0

Whoops, ich hatte syntaktische Fehler in meinem Shader. Vielen Dank! – Martin

-2

Es scheint, dass glew einfach nicht richtig funktioniert ... Die einfachste Lösung für mich war die Verwendung von lippoxy. Es erfordert keine Init-Sache. Ersetzen Sie einfach Ihre

#include <GL/glew.h> 

mit

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

und entfernen Sie alle glew Code. Wenn Sie gcc verwenden, müssen Sie auch "-lGLEW" durch "-lepoxy" ersetzen. Das ist es. Zum Beispiel habe ich etwas wie:

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

Es scheint wichtig zu sein, Epoxy-Flag vor anderen zu halten.