金属着色语言中的全局变量
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,当您在渲染区域内单击时,它会在控制台中显示鼠标坐标。
我想用鼠标来控制我的相机位置。这个想法是有一个全局变量 float3 pos
携带当前相机位置,以便下一次更新将来自 pos
本身。
当我在 Metal
中声明一个 global variable
时:
float3 pos;
并得到这个错误:
Global variable must have a constant address space qualifier.
但是如果我添加 constant
,它会变为只读状态,因此我无法更新我的当前位置。
我能想到的替代方法是使用 struct
。但这似乎有点过头了。
最好的方法是什么?
确实,在MSL
中,只有只读变量(常量)可以定义为全局变量。您可以通过缓冲区将鼠标坐标从主机 (API) 代码发送到您的着色器来执行此操作。在那里更新这些坐标的值,然后更新缓冲区,以便主机代码实时看到您更新的值。这是一个 playground,当您在渲染区域内单击时,它会在控制台中显示鼠标坐标。