Dai uno sguardo allo /System/Library/Frameworks/OpenGL.framework/Headers/gl.h
, dovresti vedere uno standard abbastanza completo di guardia sulla prima riga: #ifndef __gl_h_
. Se guardi allo gl3.h
noterai una protezione di tipo ugualmente standard per __gl3_h_
. Questo avviso viene attivato solo quando entrambi sono definiti e GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
non è definito.
Il modo più semplice per impedire l'inclusione di qualsiasi cosa dall'interno di gl.h
è #define __gl_h_
prima che venga incluso. Per evitare di rovinare il codice vero e proprio con qualcosa di brutto come:
#ifdef __APPLE__
# define __gl_h_
# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
#endif
vorrei suggerire di aggiungere -D__gl_h_ -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
come opzione del compilatore per il vostro Makefile quando si target OS X (in modo che non importa dove gl.h
è indirettamente inclusa da, non fa mai niente). Questo non è il modo giusto per affrontarlo e questo avviso è stato generato per un motivo (che hai evidenziato nella tua domanda - i token OpenGL deprecati non generano avvisi/errori del compilatore quando entrambe le intestazioni sono incluse).
Penso che lo stesso SDL2 dovrebbe avere un meccanismo di pre-processore per fare ciò che ho fatto in precedenza con #ifdef __APPLE__
ma, al posto di quello, questo avrà il compito. Non è un errore in alcun modo includere entrambi, OS X fornisce solo un pratico meccanismo per generare errori del compilatore quando i token deprecati (ad esempio GL_MODELVIEW
) vengono utilizzati in un progetto che dovrebbe essere il core 3+.
Su altre piattaforme, se si utilizza core OpenGL 3+ non è così bianco e nero in fase di compilazione, quindi il compilatore non può essere utilizzato per questo scopo. È una di quelle cose che Apple fa solo perché possono; "pensa diversamente."
fonte
2013-09-29 00:00:02
Ottima risposta. Sembra che la definizione di '__gl_h_' causi alcuni problemi internamente in SDL, ma questo è un problema separato. Vedrò cosa posso trovare direttamente dalla loro comunità. – Karl