关于macos:Metal Shading Language中的Global变量

Global variable in Metal Shading Language

我想使用鼠标来控制相机的位置。这个想法是让全局变量float3 pos带有当前摄像机的位置,以便下一个更新将来自pos本身。

当我在Metal中声明global variable时:

1
float3  pos;

并得到此错误:

Global variable must have a constant address space qualifier.

但是如果我添加constant,它将变为只读,因此我无法更新当前位置。

我可以想到的替代方法是使用struct。但这似乎有点过头了。

执行此操作的最佳方法是什么?


实际上,只能在MSL中将只读变量(常量)定义为全局变量。您可以通过将鼠标坐标从主机(API)代码通过缓冲区发送到着色器来实现。在其中更新这些坐标的值,然后更新缓冲区,以便主机代码实时查看您更新的值。这是一个游乐场,向您显示在渲染区域内单击时控制台中的鼠标坐标。