見出し画像

🎡shadertoyからglslsandboxに移植するためのc言語マクロ テンプレソース付き

三大MHならぬ三大gsls書ける場所、しかし、互換性は低い

shadertoyのエントリポイントはmainImage

イメージシェーダは、mainImage()関数を実装し、各ピクセルの色を計算してプロシージャルイメージを生成します。この関数は、ピクセルごとに一度だけ呼び出されることが想定されており、ホストアプリケーションは、この関数に適切な入力を与え、出力された色を取得してスクリーンのピクセルに割り当てる責任があります。プロトタイプは以下の通りです。

void mainImage( out vec4 fragColor, in vec2 fragCoord );

ここで、fragCoord には、シェーダが色を計算する必要のあるピクセル座標が含まれています。座標はピクセル単位で、レンダリングサーフェス上の0.5からresolution-0.5までの範囲で、解像度はiResolutionユニフォーム(後述)を通してシェーダに渡されます。
結果の色は、4成分のベクトルとしてfragColorに集められますが、最後の成分はクライアントによって無視されます。結果は、将来的に複数のレンダリングターゲットを追加することを想定して、「out」変数として収集されます。

GLSLSANDBOXのエントリポイントはmainなので、defineしてユニフォーム関数を再定義、mainからmainImageを呼ぶようにしてコピペすれば、テクスチャとか使ってなければある程度は動きます。


 #ifdef  GL_ES
precision mediump float; #endif 

// glslsandbox uniforms
uniform float time;
uniform vec2 resolution;

// shadertoy emulation #define  iTime time #define  iResolution vec3(resolution ,0.1)

// --------[ Original ShaderToy begins here ]---------- //
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    
}
// --------[ Original ShaderToy ends here ]---------- //

void main(void)
{
    mainImage(gl_FragColor, gl_FragCoord.xy);
    gl_FragColor.a = 1.;
}



https://glslsandbox.com/e#82678.0
https://amzn.to/3q26Es7


お願い致します