OpenGLES2.0を使用してiPhoneアプリケーション用のマルチテクスチャポイントスプライトを作成しようとしています。Webでこの例を見つけることができず、機能していないようです。ポイントスプライトにGL_POINTSモードを使用するときに、gl_PointCoordを複数のテクスチャで使用できないという組み込みの制限はありますか?
uniform sampler2D tex;
uniform sampler2D blur_tex;
vec4 texPixel = texture2D( tex, gl_PointCoord );
vec4 blurPixel = texture2D( blur_tex, gl_PointCoord );
TRIANGLE_STRIPモードではマルチテクスチャリングを問題なく実行できるため、テクスチャを適切に渡すことができると確信していますが、ポイントスプライトを使用して処理を高速化したいと考えています。
可能であれば、動作するコードの例へのリンクが非常に役立ちます。ありがとう!
編集:
これが、テクスチャをシェーダーに渡す方法です。これにより、TRIANGLEモードまたはTRIANGLE_STRIPモードのときにマルチテクスチャリングを実行できます。
//pass in position and tex_coord attributes...
//normal tex
glActiveTexture(0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex0);
glUniform1i(SAMPLER_0_UNIFORM, 0);
//blur tex
glActiveTexture(1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, tex1);
glUniform1i(SAMPLER_1_UNIFORM, 1);
//draw arrays...
ただし、POINTSモードを使用している場合、2番目のテクスチャは表示されません。つまり、上記のシェーダーコードを参照すると、
gl_FragColor = texPixel;
また
gl_FragColor = burnPixel;
同じ質感が見えます。これは奇妙に思えます。私の推測では、ポイントスプライトでマルチテクスチャリングを行うことはできず、どういうわけか2つのアクティブなテクスチャまたはgl_PointCoordへの2つの呼び出しがあると問題が発生します。しかし、私は私が間違っていることを望んでいます。したがって、OpenGL ES 2.0でポイントスプライトを操作するマルチテクスチャリングの簡単な例があれば、そのコードを見て喜んでいます。
編集2:
頂点シェーダー:
attribute vec4 position;
void main() {
gl_PointSize = 15.0;
gl_Position = position;
}
フラグメントシェーダー:
precision mediump float;
uniform sampler2D tex;
uniform sampler2D blur_tex;
void main() {
vec4 texPixel = texture2D( tex, gl_PointCoord );
vec4 blurPixel = texture2D( blur_tex, gl_PointCoord );
//these both do the same thing even though I am passing in two different textures?!?!?!?
//gl_FragColor = texPixel;
gl_FragColor = blurPixel;
}