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

时间:2016-09-20 12:20:47

标签: macos metal

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

当我在global variable声明Metal时:

float3  pos;

并收到此错误:

  

全局变量必须具有常量地址空间限定符。

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

我能想到的另一种选择是使用struct。但这似乎有点过头了。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

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