2014-04-15 11 views

risposta

6

Per i principianti, oltre a chiamare una funzione come glUniform* (...) per impostare il valore di un'uniforme, non c'è altra cosa che puoi fare con loro. Le uniformi non esistevano prima di GLSL.

Le posizioni degli attributi in OpenGL risalgono al linguaggio assembly GL_ARB_vertex_program (dove gli attributi avevano numeri invece di nomi). Infatti, quando questo è stato aggiunto al GL, tali indici alias ai puntatori a funzione fissa tradizionali (es == glVertexPointer (...), == glNormalPointer (...), == glColorPointer (...)) in modo che i programmi vertex potrebbe facilmente cadere nelle applicazioni esistenti. GLSL ha riutilizzato parti dell'API che le estensioni del linguaggio assembly hanno aperto la strada (questo accade molto).

Vale la pena ricordare che nel GLSL, solo 1 alias è garantita/consentito in un'implementazione conforme e che è (molti driver, NV in particolare, alias più di questo). Quando si mischiano e si abbinano gli attributi dei vertici a funzioni fisse e programmabili, è importante evitare indici che facciano riferimento ad altri puntatori usati e ciò richiede la possibilità di impostare manualmente le posizioni.

Ancora più importante, tuttavia, la possibilità di impostare in modo esplicito le posizioni degli attributi generici dei vertici rende più conveniente l'adattamento dei programmi GLSL a dati rigidamente definiti. Invece di impostare un diverso set di puntatori di vertici solo per abbinare l'interfaccia prevista di un vertex shader, è spesso più facile compilare/collegare un programma GLSL per abbinare il layout dei dati del vertice.

Questo comportamento non è così importante per le uniformi, ma tuttavia, essi fare hanno simile funzionalità in forma di Uniform Buffers. È possibile associare buffer uniformi a una posizione condivisibile (di propria scelta) e riutilizzare tutti i valori nel proprio Blocco uniforme su tutti i programmi GLSL. In realtà, questa funzionalità è stata originariamente introdotta sotto forma di un'estensione con il nome: GL_EXT_bindable_uniform

Problemi correlati