Come si passa da riferimento in uno shader GLSL?È possibile passare una matrice per riferimento in uno shader GLSL?
risposta
È possibile contrassegnare un attributo come inout
nella firma funzione e che renderà l'attributo in modo efficace "pass per riferimento"
Per esempio,
void doSomething(vec3 trans, inout mat4 mat)
Qui mat
è "passati per riferimento" , trans
viene passato per valore.
mat
deve essere scrivibile (cioè non un attributo omogeneo)
È possibile utilizzare 'inout' su elementi/swizzles di tipi composti? per esempio. 'void swap (inout float a, inout float b); vec3 foo, bar; swap (foo.x, bar.x) ' – AkiRoss
È una bugia. Il qualificatore del parametro di funzione "inout" genererà due "copie profonde" dei tuoi dati. Leggi la documentazione https://www.opengl.org/wiki/Core_Language_(GLSL)#Functions Come posso vedere c'è solo un modo per ottenere veri "riferimenti" in glsl, e questo è permesso da questa estensione: https://www.opengl.org/registry/specs/NV/shader_buffer_load.txt – Crabonog
Per chiunque imbattersi in questa risposta, in futuro, ** IT è completamente sbagliato **. GLSL non ti dà il controllo su come i parametri delle funzioni vengono passati "sotto il cofano". Invece, il compilatore decide ** tutto **, e (si spera) non copierà di fatto le cose in genere. Vedi [questa risposta] (https://stackoverflow.com/a/28577878) per maggiori dettagli. – user69513
- 1. Passare una variabile a uno shader GLGL OpenGL
- 2. shader GLSL che scorre trama
- 3. Come eseguire il debug di uno shader GLSL?
- 4. È possibile sostituire GLSL con CG?
- 5. Modo corretto per eliminare lo shader GLSL?
- 6. Cercando di porto uno shader vetro GLSL al trattamento 3.0
- 7. GLSL 1.5 Simple Geometry shader
- 8. GLSL | Shader cartellone, mantenere il ridimensionamento
- 9. GLSL Vertex shader grafico altezza bilineare
- 10. L'indice della matrice variabile non è possibile negli shader webgl?
- 11. Invio di due trame allo shader GLSL
- 12. È possibile passare un array di dimensioni fisse come parametro della funzione GLSL?
- 13. È possibile emettere l'output GLSL su due/più trame contemporaneamente?
- 14. Invio di dati ossei a glsl shader
- 15. Lo shader di convoluzione semplice GLSL è atrocemente lento
- 16. Come sono gli shader GLSL predefiniti? per la versione 330
- 17. In uno shader di frammenti GLSL, come accedere a texel a un livello specifico di mipmap?
- 18. Passare una stringa per riferimento in Javascript
- 19. C++: è normale passare il riferimento matrice alla funzione
- 20. printf in GLSL?
- 21. Più trame in GLSL - solo una funziona
- 22. Come si analizzano gli shader OpenGL scritti in GLSL?
- 23. Do GLSL geometry shader lavorano sulla GMA X3100 sotto OSX
- 24. Come migliorare questo shader di downsampling di immagini WebGL/GLSL
- 25. Passare un array per riferimento in C?
- 26. Ordinamento rapido in GLSL?
- 27. Differenze tra GLSL e GLSL ES 2
- 28. GLSL 4.1 con gl_ModelViewProjectionMatrix
- 29. È possibile accedere a tutti i vertici in un poligono in uno shader di vertici?
- 30. Analisi di una stringa shader GLSL per trovare i nomi delle variabili nell'NDK Android
Che cosa significa "per riferimento" significa qui? L'obiettivo è di passare "senza fare una copia in modo che le modifiche future - all'oggetto condiviso - influenzino lo shader"? –
Grande commento. Quello che intendo è esattamente il significato in C++ o in qualsiasi altro linguaggio di programmazione - __a una copia locale del parametro passato non è stata creata__. – bobobobo