2011-10-26 14 views
21

Zacząłem pisać programy w C (na razie) używając GLFW i OpenGL. Mam pytanie, skąd mam wiedzieć, z której wersji OpenGL korzysta mój program? Mój laptop mówi, że moja karta wideo ma OpenGL 3.3. Wpisywanie "glxinfo | grep -i opengl" zwraca:Skąd mam wiedzieć, której wersji OpenGL używam?

OpenGL vendor string: NVIDIA Corporation 
OpenGL renderer string: GeForce 9600M GT/PCI/SSE2 
OpenGL version string: 3.3.0 NVIDIA 285.05.09 
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler 
OpenGL extensions: 

Czy automatycznie korzysta się z OpenGL 3.3?

+1

Więc sam wymyśliłeś rozwiązanie i zapomniałeś o swoim pytaniu, czy nadal masz jakieś niejasności? W pierwszym przypadku porzucenie pytania jest wyjątkowo złą praktyką, aw tym drugim przypadku prosimy o zadawanie dalszych pytań na temat istniejących odpowiedzi, a nawet dodawanie własnych odpowiedzi, jeśli są one inne niż już istniejące. –

+1

Jeśli chcesz sprawdzić wersję * GLEW * na * Linux * z terminala, możesz zainstalować 'glew-utils' i uruchomić' visualinfo | grep "Wersja OpenGL" '. –

Odpowiedz

16

Wystarczy zadzwonić glGetString(GL_VERSION) (raz kontekst jest inicjowany, oczywiście) i zgasić wynik (który jest faktycznie tym samym, że glxinfo robi, przypuszczam):

printf("%s\n", glGetString(GL_VERSION)); 

Twój program powinien automatycznie użyć najwyższa możliwa wersja twojego sprzętu i obsługa sterowników, która w twoim przypadku wydaje się być 3.3. Ale dla stworzenia kontekstu podstawowego profilu dla OpenGL 3+ (takiego, w którym przestarzałe funkcje zostały całkowicie usunięte), musisz podjąć specjalne środki. Ale od wersji 2.7 GLFW ma na to środki, używając funkcji glfwOpenWindowHint. Ale jeśli nie chcesz jawnie zabronić przestarzałej funkcjonalności, możesz po prostu użyć kontekstu podanego przy domyślnych funkcjach tworzenia kontekstu GLFW, który, jak powiedział, obsługuje najwyższą możliwą wersję dla twojego sprzętu i sterowników.

Należy jednak pamiętać, że aby korzystać z funkcjonalności OpenGL wyższej niż wersja 1.1, należy pobrać odpowiednie wskaźniki funkcji lub skorzystać z biblioteki, która obsługuje tę funkcję, np. GLEW.

+0

"Ale jeśli dobrze pamiętam, potrzebujesz specjalnej funkcji do utworzenia kontekstu OpenGL dla wersji wyższych niż 2.1." Nie prawda. Nie musisz używać WGL/GLX_ARB_create_context_attribs, aby uzyskać wyższą wersję niż GL 2.1. Zwykły interfejs API do tworzenia kontekstów zapewni kontekst kompatybilny z wersją 2.1. Jeśli więc obsługiwana jest zgodność z 3.3, to właśnie dostaniesz. –

+0

@NicolBolas Ok, zaktualizował odpowiedź. Nie mam jeszcze praktycznego doświadczenia na poziomie 3+, dziękuję za wyjaśnienia. –

+0

@Christian - również specyficzne ograniczenie systemu Windows. MSFT wysyła tylko implementację opengl 1.1, więc nawet jeśli twój sterownik karty graficznej obsługuje coś nowszego, musisz użyć GLEW lub ręcznie załadować bibliotekę DLL i wywołać funkcje przez adresy –

Powiązane problemy