2012-06-07 10 views
5

Dostaję segfaults i nie mogę zrozumieć dlaczego. Osoba, z którą pracuję, kompiluje się i działa poprawnie na maszynie OSX. gdb backtrace daje mi, że to przychodzi z tej części kodu, konkretnie od glGenFramebuffers:Segfault w glGenFramebuffers

// Render the warped texture mapped triangles to framebuffer 
GLuint myFBO; 
GLuint myTexture; 

glEnable(GL_TEXTURE_2D); 
glGenTextures(1, &myTexture); 
glBindTexture(GL_TEXTURE_2D, myTexture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.width, size.height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 

glGenFramebuffers(1, &myFBO); 
glBindFramebuffer(GL_FRAMEBUFFER_EXT, myFBO); 

Używam Ubuntu 12.04 z kartą Nvidia wykorzystaniem najnowszych firmowe sterowniki nVidii dostarczonych przez system operacyjny. Nie jestem bardzo zaznajomiony z OpenGL, wiele z tego kodu jest moim partnerem, a on też jest zaskoczony. Jeśli potrzebujesz dodatkowych informacji, chętnie go udostępnię.

+2

Czy sprawdziłeś już błędy, wywołując 'glGetError()' gdzieś w kodzie? Może jego wyniki mogą ci pomóc. – Gnosophilon

+2

Czy wskaźnik lub funkcja glGenFramebuffers? Jeśli wskaźnik - czy jest poprawny (nie NULL)? Czy kontekst OpenGL jest tworzony podczas wykonywania tego kodu? –

Odpowiedz

3

Odpowiedź rzeczywiście okazała się bardzo prosta. Kodery OSX nie muszą wywoływać glewInit(), zanim zaczną używać połączeń typu "glew" - robią to użytkownicy systemu Linux i Windows. Ponadto dowiedziałem się jeszcze trochę interesujących informacji: Sprawdź, czy jesteś w stanie wykonać bezpośrednie renderowanie za pomocą glxinfo. Może to mieć znaczenie przy uruchamianiu programów OpenGL.

Powiązane problemy