gpt4 book ai didi

swift - Metal Shading Language - 使用 Struct 获取缓冲区值

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:36 24 4
gpt4 key购买 nike

如何使用 struct 获取缓冲区值?例如:

struct mouseInput
{
float x;
float y;
};

kernel void compute(texture2d<float, access::write> output [[texture(0)]],
constant float &time [[buffer(0)]],
constant mouseInput.x &mouseX [[buffer(1)]],///<--mouseX from swift
constant mouseInput.y &mouseY [[buffer(2)]],///<--mouseY from swift
uint2 gid [[thread_position_in_grid]]) {
...
}

然后我可以访问 mouseInput.xMetal 中的任何地方。最接近的是this thread但是我不确定如何将其转化为我的用途。

最佳答案

对我来说,为鼠标位置的两个分量使用单独的缓冲区似乎很愚蠢而且很浪费。

创建一个包含两者的缓冲区。然后使用如下签名编写您的计算函数:

struct mouseInput
{
float x;
float y;
};

kernel void compute(texture2d<float, access::write> output [[texture(0)]],
constant float &time [[buffer(0)]],
constant mouseInput &mouse [[buffer(1)]],
uint2 gid [[thread_position_in_grid]]) {
...
}

事实上,根据您应用的其余部分,将时间与鼠标位置结合起来可能是有意义的:

struct params
{
float time;
float2 mouse;
};

kernel void compute(texture2d<float, access::write> output [[texture(0)]],
constant params &params [[buffer(0)]],
uint2 gid [[thread_position_in_grid]]) {
...
// use params.time to get the time value.
// Use params.mouse.x and params.mouse.y to get the mouse position.
}

关于swift - Metal Shading Language - 使用 Struct 获取缓冲区值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com