我尝试将this shadertoy scene翻译成Metal Kernel
。在shartrtoy代码中:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec3 dir = rayDirection(45.0, iResolution.xy, fragCoord);
...
}
在OpenGL
案例中,我们需要从iResolution
窗口发送glfw
。来自fragCoord
的{{1}}将gl_FragCoord
。
我在Fragment Shader
档案中有这个:
metal
所以我可以从kernel void compute(texture2d<float, access::write> output [[texture(0)]],
uint2 gid [[thread_position_in_grid]]) {
int width = output.get_width();
int height = output.get_height();
....
}
和iResolution
获取width
。但我不确定如何获得height
。
gl_FragCoord
是否有等同于Metal_stdlib
的内容?或者如果我必须计算,我怎样才能获得相同的值?
答案 0 :(得分:1)
如果你正在寻找&#34;片段&#34;在窗口坐标中的位置(如gl_FragCoord
所示),您可以使用float2(gid)
,范围从(0,0)到(宽度,高度)。仅当您的网格尺寸(线程组大小和线程组计数的乘积)与目标纹理的尺寸完全匹配时才会出现这种情况。