我尝试将这个shadertoy场景翻译成Metal Kernel
。在shadertoy代码中:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec3 dir = rayDirection(45.0, iResolution.xy, fragCoord);
...
}
在OpenGL的情况下,我们需要从glfw窗口发送iResolution。而fragCoord将来自Fragment Shader中的gl_FragCoord。
我有一个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
,但我不确定如何获取gl_FragCoord
。
Metal_stdlib
是否有与gl_FragCoord
等效的内容?或者如果我必须计算,该怎么样才能获得相同的值?
gl_FragCoord
的是float2(gid) / float2(width, height)
。 - warrenm[[position]]
标记的stage_in
结构体字段。 - Ken Thomasesgl_FragCoord
),那么它只是float2(gid)
,其范围从(0,0)到(width,height)(同样,前提是您的网格维度(线程组大小和线程组计数的乘积)完全匹配目标纹理。 - warrenmfloat2(gid)
替换了它,现在我得到了我想要的结果。@warrenm,你能把它变成答案,这样我就可以接受它了吗? - sooon