2011-01-14 15 views
17

Esiste un flag del compilatore o un altro metodo per forzare solo il profilo core OpenGL? Voglio ricevere un errore quando uso funzioni deprecate come glRotatef e così via.Forzare solo il profilo core OpenGL

Edit1: io sto usando Linux, tuttavia, sono anche interessato a sapere come fare questa operazione in Windows

EDIT2: io preferirei un errore in fase di compilazione, ma l'errore di runtime sarebbe ok pure .

+1

Quale piattaforma Are You On? La risposta alla tua domanda dipende da cosa usi per collegarti a OpenGL. – ltjax

risposta

9

È possibile compilare il codice utilizzando gl3.h anziché gl.h.

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

+0

Ho provato questo ma non funziona. Con ciò intendo che non ottengo alcun errore quando compilo usando le funzioni deprecate del profilo non principale. Penso che la ragione è che includo anche glx.h e a sua volta include gl.h. – WesDec

+0

Stupido trucco che forse hai già provato: provare a emettere __ # define __gl_h____ prima di includere glx.h per 'prevenire' gl.h dall'essere incluso? – rotoglup

+0

Le intestazioni non fanno alcuna differenza sulla versione del contesto OpenGL creato. Sono solo, beh, le intestazioni. – Kos

8

Prova wglCreateContextAttribsARB() con WGL_CONTEXT_CORE_PROFILE_BIT_ARB.

oppure glXCreateContextAttribsARB con GLX_CONTEXT_CORE_PROFILE_BIT_ARB.

È possibile trovare this example utile come banco di prova.

+0

Questo è solo per Windows, no? Sfortunatamente non ho accesso a una macchina Windows al momento, quindi non posso provarlo. – WesDec

+0

@WesDec: scovato la versione GLX e modificato la risposta. – genpfault

+1

Questo non sembra forzare solo il profilo core OpenGL. Ho modificato il banco di prova includendo GLX_CONTEXT_CORE_PROFILE_BIT_ARB e incluso una chiamata glRotatef dopo il primo "sleep (1);" chiama e non ho errori – WesDec

4

dipende da ciò che crea il tuo contesto OpenGL.

Se stai usando GLFW (che consiglio vivamente per standalone applicazioni finestre OGL), allora si può fare prima di creare la finestra:

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 

Si noti che se si richiede un 3.0 pre-contesto GL su hardware/driver moderni, è probabile che tu riceva un contesto più recente possibile in modalità compatibilità. Controlla cosa restituisce la tua GPU da glGetString(GL_VERSION) per essere sicuro.

Se si utilizza un'altra API per la creazione del contesto OpenGL, controllare il suo manuale di riferimento per funzioni simili.


BTW: Credo che sia impossibile ottenere un errore in fase di compilazione - il compilatore può non essere a conoscenza che contesto OpenGL riceverete dopo la vostra richiesta (se applicabile). Il modo corretto per garantire che non si stia utilizzando la funzionalità fuori versione è il test per glGetError().

Inoltre, si consiglia di utilizzare il wrapper di estensione gl3w se si compila per Windows.

Problemi correlati