Sto lavorando su un motore di gioco e si è evoluto notevolmente. Perché il motore ha bisogno di lavorare su Mac anche, sto ancora utilizzando OpenGL 3.2 e 1.2 GLSL :-( Io uso GLEW che ho assunto avrebbe risolto problemi di estensione per meEstensioni OpenGL, come usarli correttamente in C e glsl
EDIT:.. Nel frattempo, parte della domanda è rispose - leggi alla successiva EDIT:
sono sempre stato in grado di fare shaders funzionano su Windows e Mac, a volte avrei dovuto aggiungere una riga nel codice GLSL come #extension GL_EXT_gpu_shader4: consentire per renderlo funziona su Mac. Sembra quindi che la mia versione di Windows darà un avvertimento quando si compila lo stesso shader, ma funzionerà.
Ma da allora Ho iniziato a usare gli shaders geometrici, il mio incubo è iniziato. Per qualche ragione, mac si aspetta che io usi #extension GL_EXT_gpu_shader4: abilita mentre Windows si aspetta che io usi #extension GL_EXT_geometry_shader4: abilita. Ciò rende meno ovvio creare uno shader indipendente dalla piattaforma.
Inoltre, e questo è ancora più fastidioso: versione per Windows vuole che io uso: glTransformFeedbackVaryings e Vorrei pensare che GLEW avrebbe renderlo disponibile per il mac, ma ci ho esplicitamente bisogno di usare glTransformFeedbackVaryingsEXT quali no lavoro sulla versione di Windows. Quindi ho bisogno di #ifdef per APPLE per utilizzare ciò che è necessario. Stesso problema con glBeginTransformFeedback e glBeginTransformFeedbackEXT.
Ma entrambi accettano glProgramParameteriEXT, c'è non ho bisogno del distiction ...
ho capito che è solo con le valutazioni di trasformare che sto avendo il problema, ma ... che cosa è questo tutto di?
Ho pensato di capire come funzionavano le estensioni OpenGL, ma sto iniziando a perdere questa comprensione.
Sta arrivando a un punto in cui penso che quando eseguo il codice su un altro sistema Windows o su un altro sistema Mac o su un altro sistema Linux, avrò nuovi problemi perché ci sono diversi adattatori grafici o qualcosa del genere.
Qualcuno può aiutarmi a capire questo? Ho letto il manuale OpenGL sulle estensioni, quindi mi manca qualcosa di ovvio. Come posso assicurarmi che il mio codice funzioni sempre?
EDIT: Rimuovendo GLEW completamente dalla versione per Mac e completamente utilizzando propria implementazione OpenGL 3.2 del Mac, tutti i namings sono normali e posso completamente rimuovere il #extension GL_EXT_gpu_shader4: abilitare dai miei shaders. L'unica cosa che mi fa preoccupare ora è che per gli shader geometrici, ho bisogno della funzione glProgramParameteri che non sembra esistere, ma lo è glProgramParameteriEXT. Per qualche ragione, questa funzione funziona anche su Windows. Perché? Posso essere sicuro che funzionerà su tutti i sistemi/hardware?
di Apple di solito è un po 'indietro, quindi potresti semplicemente voler controllare la versione supportata ufficialmente. [this] (http://stackoverflow.com/questions/15101939/glsl-vertex-shader-crashes-computer) è stato pubblicato prima della tua domanda. –
Hm, non penso che il post mi aiuti. Sto sviluppando su OSX Lion 10.7.5 ed è un adattatore grafico AMD. Ma se ti capisco bene, i problemi sono legati alla cattiva implementazione di Apple? In che modo tutti quei giochi a vapore vengono portati e funzionano? – scippie
Perché non stai usando il core OpenGL 3.2 disponibile su MacOSX. –