2011-12-19 15 views
5

Mam problem z aktualizowaniem nagłówków GL. Zasadniczo chcę uzyskać dostęp do funkcji glCompressedTexImage2D, ale moje nagłówki gl są naprawdę stare i nie wierzę, że funkcja istnieje w tych nagłówkach. Więc próbowałem zaktualizować mój plik gl.h, ale dostaję mnóstwo błędów. Próbowałem między innymi aktualizować oprogramowanie karty graficznej. Czy ktoś może być pomocny?opengl, jak najlepiej zaktualizować nagłówki za pomocą Visual Studio?

Odpowiedz

3

Wygląda na to, że Windows utknął na starej wersji OpenGL (1.2?). Spróbuj użyć GLEW lub Glee, aby załadować potrzebne rozszerzenie (GL_ARB_TEXTURE_COMPRESSION w przypadku glCompressedTexImage2D). Te biblioteki załadują dostępne rozszerzenia i pozwolą ci sprawdzić kod, jeśli dane rozszerzenie zostanie załadowane.

Przykład z radości:

#include <gl/GLee.h>   

if (GLEE_ARB_TEXTURE_COMPRESSION) 
{ 
    glCompressedTexImage2D(...); 
} 
else 
{ 
    // the extension is not available, use a different method 
} 

Zauważ, że Glee nie wymaga jawnie zainicjować (w przeciwieństwie GLEW). Zdecydowanie polecam tę metodę przez ręczne ładowanie wskaźnika funkcji. Nie dlatego, że to moja odpowiedź :), ale dlatego, że to również zajmie się stwierdzeniem, czy sprzęt i jego sterownik obsługują rozszerzenie (które może być bardzo niechlujne), i to jest niezależne od platformy.

+0

Zauważ, że Glee jest zlikwidowany i nie jest już aktualizowany. Zatrzymał się w GL 3.3; od tego czasu opublikowano 6 wersji OpenGL. Więc jakkolwiek bardzo lubisz styl, nie powinieneś go używać. Istnieje [liczba alternatyw dla ładowania funkcji OpenGL] (http://www.opengl.org/wiki/OpenGL_Loading_Library). –

+0

Dzięki za heads-up. –

1

Musisz dowiedzieć się, jeśli urządzenie obsługuje tę funkcję, a następnie uzyskać adres funkcji, zanim będzie można nazwać:

PFNGLCOMPRESSEDTEXIMAGE2DPROC p = NULL; 
const char* string = glGetString(GL_EXTENSIONS); 

if (strstr(string, "GL_ARB_texture_compression") != NULL) 
    p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D"); 
5

Mam trochę uaktualnienia emisyjnej moje nagłówki GL.

To dlatego, że nie powinno się tego robić. W systemie Windows wszystko poza OpenGL-1.1 jest gromadzone przez mechanizm rozszerzenia. Najprostszym sposobem uzyskania dostępu do tego jest GLEW. Zainstaluj to i użyj GL/glew.h zamiast zwykłego GL/gl.h. Następnie po utworzeniu kontekstu OpenGL pierwszą rzeczą, którą należy wywołać, jest glewInit().

0

Przejdź do: http://www.opengl.org/registry/ i pobierz najnowszą wersję glext.h i wglext.h

Teraz będzie można ręcznie uzyskać wskaźnik funkcji do funkcji, które chcesz. W systemie Windows dostępny jest tylko OpenGL 1.1.

Dla początkujących proponuję przy użyciu GLEW (Glee jest również świetne, ale nie został zaktualizowany przez dość długi czas ...)

Powiązane problemy