Sto imparando OpenGL e ho notato che ho la possibilità di usare glGetAttribLocation()
o glBindAttribLocation()
quando si tratta di attributi di input, ma per uniformi, devo usare glGetUniformLocation()
. C'è qualche motivo tecnico per non includere glBindUniformLocation()
nell'API?Perché non esiste un equivalente glBindAttribLocation() per le variabili uniformi?
risposta
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
- 1. Perché dovrei usare glBindAttribLocation?
- 2. Esiste un equivalente di override per le funzioni annidate?
- 3. Esiste un equivalente di O_TMPFILE per le directory?
- 4. Ruby ha un equivalente method_missing per le variabili di istanza non definite?
- 5. Perché non esiste un equivalente std :: is_transparent per i contenitori non ordinati?
- 6. Come si collegano posizioni uniformi in GLSL?
- 7. Esiste un equivalente Cake per Python?
- 8. Esiste un equivalente WPF per ToolStripButton?
- 9. Esiste un equivalente in C++ per getcwd?
- 10. Esiste un equivalente JavaScript per C# 'params'?
- 11. Esiste un equivalente di sprint per node.js
- 12. Esiste un equivalente GAC per .NET Core?
- 13. Esiste un metodo equivalente LINQ?
- 14. Perché Java inizializza solo le variabili di classe per impostazione predefinita ma non le variabili locali?
- 15. Esiste un equivalente WPF per un DOM explorer?
- 16. Equivalente C equivalente a "Variabili variabili" di PHP
- 17. Esiste un RRDTool .net equivalente
- 18. Esiste un equivalente della funzione __noSuchMethod__ per le proprietà o un modo per implementarlo in JS?
- 19. PHP equivalente a [&, epsilon] C++ "Catturare" le variabili in lambda?
- 20. Elenca tutte le variabili definite di MSBuild - Equivalente all'impostazione
- 21. Perché le variabili membro non possono essere condivise?
- 22. Esiste un equivalente di vector :: reserve() per un elenco std ::?
- 23. Esiste un equivalente del tipo di classe Show per Data.Text?
- 24. Perché preferire le proprietà alle variabili pubbliche?
- 25. Esiste un numero intero equivalente di __toString()
- 26. Esiste un modo per utilizzare variabili locali tra i moduli?
- 27. Esiste un equivalente AddRange per un HashSet in C#
- 28. Esiste un equivalente standard getch() in C++?
- 29. Esiste un equivalente Linux di SetWindowPos?
- 30. Esiste un equivalente a `cabal-dev ghc`