私はテクスチャにいくつかの不自然なデータをアップロードコードがあります。常に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_ALPHA
GL_RGBA
に変更したときに、私は戻って取得行うそして、フレームバッファにテクスチャを付けるglTexImage2D
後glReadPixels
を呼び出すことに注意してくださいプラットフォームにかかわらず、私が入れた正確なデータと機能(または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で動作する理由は全くありません。便利!