2016-09-21 3 views
5

私はテクスチャにいくつかの不自然なデータをアップロードコードがあります。常にiOSの上vec4(0、0、0、1を。)を返すのGLテクスチャサンプラ(しかし、OSX/Android上で機能している)

glActiveTexture(GL_TEXTURE0+gl_sim_texture_active_n); 
glBindTexture(GL_TEXTURE_2D, gl_sim_texture_buff_id); 
for(int i = 0; i < w*h; i++) buff[i] = 0xAB; 
glTexImage2D(GL_TEXTURE_2D,0,GL_ALPHA,w,h,0,GL_ALPHA,GL_UNSIGNED_BYTE,buff); 

と私のシェーダでそのテクスチャからわずかのサンプルコード:OSXとAndroid上で

uniform vec2 viewport; 
uniform sampler2D sim_texture; 
void main() 
{ 
    vec2 tex_uv = vec2(gl_FragCoord.x/(viewport.x-1.),gl_FragCoord.y/(viewport.y-1.)); 
    gl_FragColor = texture2D(sim_texture,tex_uv).argb; //swizzle is to just put 'a' in a visibly renderable position as "redness" 
} 

、このテクスチャが(ファンシーsampler2D-何も経由して)私のシェーダで読み取り可能である - それは動作します。 iOSの上で、sampler2Dは関係なく、中に入れたデータの、vec4(0.,0.,0.,1.)返すことから、任意のサンプル。

(私はGL_ALPHAGL_RGBAに変更したときに、私は戻って取得行うそして、フレームバッファにテクスチャを付けるglTexImage2DglReadPixelsを呼び出すことに注意してくださいプラットフォームにかかわらず、私が入れた正確なデータと機能(またはiOSの機能に欠けている)は同じです。GL_RGBAへの切り替えは、フレームバッファに接続するために必要でした。これはglReadPixelsに必要ですデバッグの目的tl; dr:データがすべてのプラットフォームで正しくテクスチャにアップロードされていることは合理的に確信しています。

その他の情報:

gl_sim_texture_active_n

は6であり、そしてgl_sim_texture_buff_idは(両方合法得て、エラーなし)14です。両方とも返品前または返品後にglGetError()またはglCheckFramebufferStatus(GL_FRAMEBUFFER)と呼んでください。 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS)は8を返します(私のテストしているAndroidデバイスと同じです)

私はOSX/AndroidではなくiOSで動作する理由は全くありません。便利!

答えて

関連する問題