WebGL を使用して小さなゲームを作成しようとしています。このゲームでは、GLSL を使用して複数のソナー エフェクト (点から外側に移動する輝くリング) を作成したいと考えています。ただし、これらのソナー効果のそれぞれは、異なるマスクの影響を受ける必要があります。このマスクは作成されてキャンバスに保存され、使いやすいようにglsl.jsを使用してフラグメント シェーダーにリンクされます。
Fragment シェーダーで、これらのソナー エフェクトとその構造体のそれぞれにオブジェクトを作成しました。ただし、マスク キャンバスを Sampler2D タイプとして追加しようとすると、シェーダー スクリプトが停止し、説明のつかないエラーが発生します。
これは Sampler2D について疑問に思います: 構造体の内部で使用することは不可能ですか、それとも何か間違ったことをしていますか?
私も同じことを試みましたが、今回はサンプラーを構造体の外側に保ち、それらを配列に入れました。ただし、フラグメント シェーダーもこれを好みません。Sampler2D オブジェクトの配列を使用することは不可能ですか?
要約する:
- 構造体の中で Sampler2D オブジェクトを使用することは可能ですか?
- Sampler2D オブジェクトの配列を作成することは可能ですか?
- これらの両方が不可能な場合: 別の方法でマスクをフラグメント シェーダーに渡すにはどうすればよいですか?
編集:
私が使用している構造体コード:
struct Sonar{
float type;//kind of effect, right now only one implemented
float posx;//xposition of effect
float posy;//yposition of effect
float incr;//how far the effect is in its animation
bool alive;//If the effect should be shown
float strength;//How strong the effect should be
sampler2D shadows;//Shadow mask
};