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

Macos 金属着色语言中的全局变量,macos,metal,Macos,Metal,我想用鼠标控制我的相机位置。其想法是使用一个全局变量float3 pos,该变量携带当前摄像机位置,以便下一次更新将来自pos本身 当我在Metal中声明一个全局变量时: float3 pos; 并获取以下错误: 全局变量必须具有常量地址空间限定符 但如果我添加常量,它将变为只读,因此我无法更新当前位置 我能想到的另一种方法是使用struct。但这似乎有点过头了 执行此操作的最佳方法是什么?实际上,在MSL中只能将只读变量(常量)定义为全局变量。可以通过缓冲区将鼠标坐标从主机(API)代码发

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

当我在
Metal
中声明一个
全局变量时:

float3  pos;
并获取以下错误:

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

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

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


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

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

我说的关于代码的话对吗:将
mousebuffer
exputffer
发送到
内核
Mousebuffer
始终更新,并且
extuffer
仅在鼠标按下时更新?正确。但是,您可以从UI类发送任何事件(或坐标),包括击键。