金属着色语言中的全局变量

Global variable in Metal Shading Language

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

当我在 Metal 中声明一个 global variable 时:

float3  pos;

并得到这个错误:

Global variable must have a constant address space qualifier.

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

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

最好的方法是什么?

确实,在MSL中,只有只读变量(常量)可以定义为全局变量。您可以通过缓冲区将鼠标坐标从主机 (API) 代码发送到您的着色器来执行此操作。在那里更新这些坐标的值,然后更新缓冲区,以便主机代码实时看到您更新的值。这是一个 playground,当您在渲染区域内单击时,它会在控制台中显示鼠标坐标。