Diventa puro OpenGL o GLSL? [chiuso]


11

Mi sono interessato allo studio della programmazione grafica, quindi l'ovvio punto di partenza era imparare OpenGL. Ma raccogliendo informazioni sparse su forum e siti, sembra che una pura implementazione OpenGL stia svanendo dal momento che la maggior parte delle cose precedenti alla 3.0 sono state deprecate e citando una recensione su Amazon, "dal momento che 3.0 riguarda solo gli shader". Anche dei libri che ho visto, sembra che solo il superbo copra la versione più recente, ma solo parzialmente perché una buona parte del libro insegna funzioni deprecate e ci sono libri specifici per GLSL.

È qui che ho riscontrato il mio primo problema, alcuni software non supportano GLSL, incluso il notebook con grafica integrata Intel che avevo pianificato di utilizzare. La funzione

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

causa un errore di segmentazione e dal suo aspetto il mio driver non supporta gli shader

Quindi la mia domanda è: qual è la fattibilità di creare un gioco solo in OpenGL? mi mancheranno insostituibili buone funzionalità dal linguaggio shader? E che tipo di hardware (vecchia generazione i3, i5, i7, vecchie VGA) posso aspettarmi di eseguire correttamente un gioco con shader?


1
GLSL è OpenGL, penso che la tua domanda sia correlata al fatto che l'hardware che intendi utilizzare sia compatibile con OpenGL 3, non specificamente compatibile con GLSL.
deceleratedcaviar

@Daniel quindi se un hardware / driver è compatibile OpenGL 3.0 è compatibile GLSL?
ibrabeicker,

1
GLSL fa parte delle specifiche OpenGL 3.0, quindi sì, è così.
Deceleratedcaviar

1
Dici "dal mio aspetto il mio autista non supporta gli shader". Quale versione di OpenGL stai ricevendo? Stai caricando correttamente tutte le funzioni OpenGL disponibili?
Nicol Bolas,

1
@Papavoikos: se restituisce NULL, hai problemi molto più grandi rispetto all'uso degli shader. Stai creando correttamente il tuo contesto OpenGL? Ricorda: non puoi chiamare nessuna funzione GL fino a quando non hai creato e reso attuale un contesto valido.
Nicol Bolas,

Risposte:


9

Il codice shader è sicuramente più chiaro e più facile da comprendere rispetto a un pasticcio di chiamate glTexEnv, glTexGen e texture matrix, e ha il vantaggio di poter esprimere qualsiasi operazione matematica più o meno arbitraria utilizzandola (cosa che non si può fare con il fisso pipeline - quello che stai chiamando "OpenGL puro"). L'unico aspetto negativo potenziale è che è necessario scrivere una certa quantità di infrastruttura di supporto nel codice prima di poter iniziare a usarli, mentre con il vecchio modo in cui è possibile immergersi praticamente. Lo chiamo un aspetto negativo "potenziale" perché in realtà pensi che ti faccia preparare le cose e imparare un po 'di più in anticipo - OpenGL ha la reputazione di essere "facile" e di tanto in tanto vedi le persone essere ingannate da questo e immergersi senza sapere davvero cosa stanno facendo prima,

Per quanto riguarda l'hardware, puoi fare affidamento su quasi tutto ciò che è stato rilasciato negli ultimi 5/6/7 anni per avere un certo grado di supporto agli shader, ma - nel caso di vecchi Intel (alcuni della serie 9xx) - non sarà GLSL, ma saranno invece le estensioni GL_ARB_vertex_program e GL_ARB_fragment_program precedenti . Questi usano un linguaggio shader simile al linguaggio assembly, ma - tempo di confessione - personalmente ne sono piuttosto affezionato. In realtà è abbastanza facile da usare, se manca di alcune funzionalità più moderne (come la ramificazione) e richiede più righe di codice shader per fare la stessa cosa. L'infrastruttura di supporto richiesta nel programma principale per queste estensioni è molto più leggera rispetto a GLSL.

Questo non vuol dire che li consiglierei su GLSL comunque, ma sono un'opzione che è lì se hai davvero bisogno di correre su questa classe di hardware ed è utile essere consapevoli che esistono, il che mi porta all'ultimo punto . Sei davvero sicuro di aver davvero bisogno di correre su questa classe di hardware (ad esempio nel caso del tuo notebook potresti aver trascurato di ottenere i punti di ingresso)?


Ho completamente ignorato il fatto che Mesa3d è ancora nelle specifiche opengl 2.1. Lo aggiusterò
ibrabeicker il

6

Va anche notato che non esiste più un "OpenGL puro".

OpenGL ES 2.0 ha abbandonato tutte le cose non shader e poiché WebGL si basa su di esse, funziona anche solo con gli shader. OpenGL 3.0 ha deprecato tutti gli elementi a funzione fissa e 3.1 li ha rimossi (nei profili principali. La maggior parte delle implementazioni supporta i profili di compatibilità, ma MacOSX non lo fa per l'implementazione 3.2).

Quindi non consiglierei di imparare OpenGL non shader.


6

Se hai già programmato in passato, scrivere il tuo codice shader usando GLSL sarà molto più divertente. Inizialmente ho provato ad imparare OpenGL a funzione fissa ed è stato più difficile per me perché non aveva senso. Poi ho cercato di imparare il GLSL usando il libro arancione ed è stato molto più semplice e da allora ho fatto di più. Solo i miei 2 centesimi.

Andrei sicuramente verso GLSL a causa del potere di scrivere programmi per la GPU.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.