我试图将此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
。
我在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();
....
}
因此,我可以从width
和height
获得iResolution
。但是我不确定如何获得gl_FragCoord
。
Metal_stdlib
是否具有相当于gl_FragCoord
的东西?或者,如果我必须计算,如何获得相同的值?
如果您在窗口坐标中寻找"片段"位置(如gl_FragCoord
IS(,则可以使用 float2(gid)
, CC_16范围从(0,0(到(宽度,高度(。仅当您的网格尺寸(线组大小和线程组计数的乘积(与目标纹理的尺寸完全匹配时,这种情况仅此。