this shadertoy sceneをMetal Kernel
に翻訳しようとしました。 shadertoyコードで:メタルシェーディング言語 - FragCoord相当ですか?
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec3 dir = rayDirection(45.0, iResolution.xy, fragCoord);
...
}
場合OpenGL
では、我々はglfw
窓からiResolution
を送信する必要があります。 fragCoord
はgl_FragCoord
からFragment Shader
になります。
私はmetal
ファイルでこれを持っている:だから私はwidth
とheight
から私のiResolution
を得ることができます
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();
....
}
。しかし、私はgl_FragCoord
を得る方法がわかりません。
Do Metal_stdlib
には、gl_FragCoord
と同等のものがありますか?または、計算しなければならない場合、どうすれば同じ価値を得ることができますか?
出力テクスチャとまったく同じサイズの単一のグリッドをディスパッチした場合、 'gl_FragCoord'に相当するものは' float2(gid)/ float2(width、height) 'です。 – warrenm
また、これは、計算関数ではなく、レンダリングパスでの実際のフラグメント関数の方が良いかもしれないようです。その場合、フラグメント座標は '[[position]]'でマークされた入力変数または 'stage_in'構造体フィールドになります。 –
@warrenmどのようにコードを実行するのですか?私の画面解像度が浮動小数点(800/600)であるとしましょう、どのように私は 'スレッドグループ'または 'スレッドグループ数'を分割するのですか? – sooon