GLSLシェーダでの参照渡しはどのようにして行いますか?あなたは関数シグニチャにinout
として属性をマークすることができ、そしてそれは属性が効果的に例えばGLSLシェーダで参照によってマトリックスを渡すことはできますか?
を「参照渡し」になります
GLSLシェーダでの参照渡しはどのようにして行いますか?あなたは関数シグニチャにinout
として属性をマークすることができ、そしてそれは属性が効果的に例えばGLSLシェーダで参照によってマトリックスを渡すことはできますか?
を「参照渡し」になります
、ここで
void doSomething(vec3 trans, inout mat4 mat)
mat
は「参照渡し」されます、trans
が値渡しされます。
mat
(すなわち均一でない属性)書き込み可能でなければなりません
複合型の要素/スウィズルに 'inout'を使用することはできますか?例えば'void swap(inout float a、inout float b); vec3 foo、bar; swap(foo.x、bar.x) ' – AkiRoss
これは嘘です。 "inout"関数のパラメータ修飾子は、データの2つの "ディープコピー"になります。ドキュメントを読む。 https://www.opengl.org/wiki/Core_Language_(GLSL)#Functions glslで真の「参照」を取得する方法は1つしかありませんが、これはこの拡張子で許可されています: https:/ /www.opengl.org/registry/specs/NV/shader_buffer_load.txt – Crabonog
今後、この回答に出くわした人には、**完全に間違っています**。 GLSLは、関数のパラメータが "フードの下で"どのように渡されるかを制御することはできません。代わりに、コンパイラは**すべての**を決定し、実際には通常は実際にコピーしません(うまくいけば)。詳細については、[この回答](https://stackoverflow.com/a/28577878)を参照してください。 – user69513
「参照することにより、」ここで何を意味するのでしょうか? "共有オブジェクトへの将来の変更がシェーダに影響するようにコピーを作成せずに"渡すという目標はありますか? –
素晴らしいコメント。私が意味するのは、C++や他のプログラミング言語の意味です。渡されたパラメータのローカルコピーは作成されません。 – bobobobo