你能在GLSL着色器中通过引用传递矩阵吗?

bob*_*obo 11 glsl

如何在GLSL着色器中通过引用传递?

bob*_*obo 11

您可以inout在函数签名中标记属性,这将使属性有效地"通过引用传递"

例如,

void doSomething( vec3 trans, inout mat4 mat )
Run Code Online (Sandbox Code Playgroud)

这里mat是"通过引用传递",trans通过值传递.

mat 必须是可写的(即不是统一的属性)

  • 这是一个谎言."inout"函数参数限定符将导致数据的两个"深层副本".阅读文档.https://www.opengl.org/wiki/Core_Language_(GLSL)#Functions我可以看到只有一种方法可以在glsl中获得真正的"引用",这个扩展允许这样做:https:// www. opengl.org/registry/specs/NV/shader_buffer_load.txt (5认同)
  • 对于今后遇到这个答案的人来说,**完全错误**.GLSL无法控制如何在"引擎盖下"传递函数参数.相反,编译器决定**所有**,并且(希望)通常不会实际复制内容.有关详细信息,请参阅[此答案](/sf/answers/2000451491/). (4认同)