今日の作業は「テクスチャからテクスチャへ位置変更してコピー」です。
昨日はウィンドウサイズを変更してもライフパターンが保持されるようにしましたが、ウィンドウの左下がベースなっていました。これを左上基準に変更します。
修正したシェーダーは以下のようになりました。
const LIFE_FS_COPY = '\
precision highp float;\
\
uniform sampler2D uPreTextureCoord;\
uniform ivec2 uFromSize;\
uniform ivec2 uToSize;\
\
void main() {\
float dotX = 1.0 / float(uFromSize.x);\
float dotY = 1.0 / float(uFromSize.y);\
float preTexX = gl_FragCoord.x * dotX;\
float preTexY = gl_FragCoord.y * dotY +
float(uFromSize.y - uToSize.y) * dotY;\
if (0.0 <= preTexX && preTexX < 1.0
&& 0.0 <= preTexY && preTexY < 1.0) {\
gl_FragColor =
texture2D(uPreTextureCoord, vec2(preTexX, preTexY));\
} else {\
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\
}\
}';
変更前と変更後のテクスチャサイズの差分 (uFromSize.y - uToSize.y) をpreTexY 変数に加算して調整しています。
また、サイズ変更前のテクスチャ座標を示すpreTexX と preTexY が 0〜1未満の範囲外ならば描画先を黒色にするよう変更しました。
修正後のウィンドウサイズ変更結果は次の通りです。
ウィンドウサイズを大きくすると・・・
はい、問題なく左上基準になりました。また、昨日の端のライフパターンが伸びる現象も解決しました。よかった!
以上です!
本家デアゴGTR-NISMO箱積状況:3箱 (33,34,35号)