【问题标题】:Global variable in Metal Shading Language金属着色语言中的全局变量
【发布时间】:2016-09-20 12:20:47
【问题描述】:

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

当我在Metal 中声明global variable 时:

float3  pos;

并得到这个错误:

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

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

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

最好的方法是什么?

【问题讨论】:

    标签: macos metal


    【解决方案1】:

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

    【讨论】:

    • 如果我这样说您的代码,我说得对吗:将mousebufferoutbuffer 发送到kernelMousebuffer 总是更新,outbuffer 只在鼠标按下时更新?
    • 正确。但是,您可以从 UI 类发送您想要的任何事件(或坐标),包括击键。
    猜你喜欢
    • 1970-01-01
    • 2017-09-14
    • 2016-06-29
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    相关资源
    最近更新 更多