2013-04-09 9 views
7

Ho cercato su Google i formati binari OpenGL e ciò che effettivamente sono/significano. Finora non ho avuto molto successo. So che posso prendere il numero e la serie di formati come segue:I formati di programmi binari OpenGL sono standardizzati?

::glGetIntegerv(GL_PROGRAM_BINARY_FORMATS, &values[0]); 

, dove i valori è uno std :: vector di interi di dimensioni:

::glGetIntegerv(GL_NUM_PROGRAM_BINARY_FORMATS, &value); 

Per il conducente mia macchina restituisce un singolo formato binario. È solo un numero ed è praticamente privo di significato per me.

Quindi le mie domande sono le seguenti:

(1) Cosa significano i numeri di formato/codici rappresentano? (2) Esistono formati binari ARB standard o dipendono dal fornitore? (3) Esiste un formato comune tra i fornitori? (4) Se ci sono più formati, come si dovrebbe scegliere tra loro?

Ho una vaga sensazione che devo precompilare e mettere in cache gli shader su una data macchina per trarne vantaggio. Voglio dire, non è come se fosse DX, in cui è possibile eseguire il compilatore dello shader come evento post-build e comprimerli insieme e utilizzarli su qualsiasi macchina (Windows) con D3D.

risposta

11

(1) Che cosa rappresentano i numeri/codici di formato?

Rappresentano identificatori univoci.

(2) Esistono formati binari ARB standard o dipendono dal fornitore?

Sono tutti specifici del fornitore.

(3) Esiste un formato comune tra i fornitori?

No.

(4) Se ci sono più formati, come si fa a scegliere tra loro?

Non è così. Non hai una scelta di formati. Quando chiami glGetProgramBinary, ottieni dati binari in un determinato formato deciso dal conducente. Quando si load that program later, è necessario passare tale formato specifico con i dati binari.

Ho una vaga sensazione che devo precompilare e mettere in cache gli shader su una data macchina per trarne vantaggio.

Sì, questo è lo scopo della funzione: consentire di memorizzare nella cache la compilazione degli shader. Ma devi sempre assicurarti che il tuo programma funzioni se la versione dello shader del driver cambia (e quindi è diversa da quando hai creato la versione cache). Quindi avrai ancora bisogno di essere in grado di ricostruire gli shader dal modulo testuale.

+0

Ok, grazie Nicol. – Robinson