2011-01-14 9 views
17

Czy jest flaga kompilatora lub inny sposób wymuszania tylko podstawowego profilu OpenGL? Chcę uzyskać błąd, gdy używam przestarzałe funkcje, takie jak glRotatef i tak dalej.Wymuszanie tylko profilu rdzeniowego OpenGL

Edit1: Używam Linuksa, jednak jestem również zainteresowany wiedząc, jak to zrobić w systemie Windows

Edit2: Wolałbym się błąd w czasie kompilacji, ale błąd wykonania byłoby ok, jak również .

+1

Co platforma jesteś stronie? Odpowiedź na twoje pytanie zależy od tego, czego używasz do połączenia z OpenGL. – ltjax

Odpowiedz

9

Można skompilować kod przy użyciu gl3.h zamiast gl.h.

http://www.opengl.org/registry/api/gl3.h

+0

Próbowałem tego, ale to nie działa. Mam na myśli, że nie dostaję żadnego błędu podczas kompilacji przy użyciu przestarzałych funkcji profili nie rdzeniowych. Myślę, że powodem jest to, że ja również włączam glx.h, a to z kolei obejmuje gl.h. – WesDec

+0

Głupia sztuczka, którą być może już wypróbowałeś: próbujesz wyemitować __ # zdefiniować __gl_h____ przed włączeniem glx.h do "zapobiegania" gl.h przed dołączeniem? – rotoglup

+0

Nagłówki nie mają wpływu na wersję utworzonego kontekstu OpenGL. Są tylko, no cóż, nagłówkami. – Kos

8

Wypróbuj wglCreateContextAttribsARB() z WGL_CONTEXT_CORE_PROFILE_BIT_ARB.

Lub glXCreateContextAttribsARB z GLX_CONTEXT_CORE_PROFILE_BIT_ARB.

Możesz znaleźć this example przydatne jako testbed.

+0

Dotyczy tylko okien, prawda? Niestety w tej chwili nie mam dostępu do komputera z systemem Windows, więc nie mogę tego wypróbować. – WesDec

+0

@WesDec: Wykopał wersję GLX i edytował odpowiedź. – genpfault

+1

Nie wydaje się to wymuszać tylko podstawowego profilu OpenGL. Zmieniłem testbed na GLX_CONTEXT_CORE_PROFILE_BIT_ARB i zawarłem wywołanie glRotatef po pierwszym "sleep (1);" zadzwoń i nie dostaję błędów. – WesDec

4

Zależy co tworzy swój kontekst OpenGL.

Jeśli używasz GLFW (który szczerze polecam dla autonomicznych OGL okna aplikacji), to można to zrobić przed utworzeniem okno:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR,3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR,1); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE); 

// the last line shouldn't be necessary 
// as you request a specific GL context version - 
// - at least my ATI will then default to core profile 

Zauważ, że jeśli wniosek wstępny 3.0 kontekst GL na nowoczesnym sprzęcie/sterownikach prawdopodobnie otrzymasz najnowszy możliwy kontekst w trybie zgodności. Sprawdź, co zwraca twój GPU z glGetString(GL_VERSION), aby się upewnić.

Jeśli używasz innego API do tworzenia kontekstu OpenGL, sprawdź jego podręcznik odniesienia, aby uzyskać podobne funkcje.


BTW: wierzę, że to niemożliwe, aby uzyskać błąd w czasie kompilacji - kompilator może nie być świadomy tego, co OpenGL kontekst otrzymasz po życzenie (jeśli występują). Prawidłowym sposobem zapewnienia, że ​​nie używasz funkcji poza wersją, jest testowanie pod kątem glGetError().

Jeśli korzystasz z systemu Windows, zalecamy używanie opakowania rozszerzeń gl3w.