2012-06-01 26 views
19

GLEW ve freeglut öğelerini kullandıktan sonra geçersiz enum değerini döndürür. Herhangi bir nedenden dolayı, glewInit() çağrısından sonra glGetError(), glewExperimental = GL_FALSE ile bile 1280 hata kodu döndürür.OpenGL: glGetError(), glewInit()

Gölgeleri derleyemiyorum, glGetProgramInfoLog() döndürüyor "Vertex shader (ler) glLinkProgram() çağrılmadan önce başarıyla derlenemedi. Bağlantı başarısız." Gölgelendiricileri daha önce derledim.

Sürücüleri yeniden yüklemek yardımcı olmadı. Yanlış

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

yapıyorum:

İşte benim kod?

+0

GlewInitResult ile bir şey yapıyor musunuz? Belki de gliwGetErrorString'i glGetError yerine çağırmalısınız (glew sorunlarını tespit etmek için) – Tim

+0

GlewInitResult ile hiçbir şey yapmıyorum. glewGetErrorString, "Hata yok" değerini döndürür. – Martin

cevap

20

Bu wiki sayfasındaki yorumu gördünüz mü? Bu durumda neden

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

O bahseder ve "bazı durumlarda hala glew sürümüne bağlı glewExperimental belirttikten sonra GL_INVALID_ENUM alabilirsiniz" diyor.

Başka bir sorun görmediğiniz sürece göz ardı edilmesinin güvenli olabileceği kulağa hoş geliyor.

+0

Hattı yorumlamaya çalıştım, hala geçersiz numara aldım. Gölgeleri derleyemiyorum, glGetProgramInfoLog() döndürür "Vertex shader (ler) glLinkProgram() çağrılmadan önce başarıyla derlenemedi. Bağlantı başarısız oldu." – Martin

+4

Programı bağlamaya çalışmadan önce gölgelendiricileri doğrulamanız gerekir: glGetShaderiv (GL_COMPILE_STATUS) ve glGetShaderInfoLog(). Bu size neden derlenemediklerini söyleyecektir. @malymato – Tim

+0

Whoops, Gölgemde sözdizimsel hata vardı. Teşekkürler! – Martin

-2

Sadece doğru şekilde çalışmıyor gibi görünüyor ... Benim için en kolay çözüm, libepoxy kullanıyordu. Bu init bir şey gerektirmez. Sadece

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

ile

#include <GL/glew.h> 

değiştirip tüm glew kodunu kaldırın. Eğer gcc kullanıyorsanız, "-lGLEW" yi "-lepoxy" ile değiştirmeniz gerekecektir. Bu kadar.

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

O diğerlerinden önce epoksi bayrağını tutmak için önemli görünüyor: Mesela ben gibi bir şey var.