人工的なデータをテクスチャにアップロードするだけのコードがあります。
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);
そして、シェーダーでそのテクスチャからサンプリングするだけのコード:
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"
}
OSX と Android では、このテクスチャは私のシェーダーで読み取ることができます (sampler2D を介して - 派手なものはありません) - 動作します。iOS では、その sampler2D からのサンプルはvec4(0.,0.,0.,1.)
、入力されたデータに関係なく を返します。
( に変更GL_ALPHA
するGL_RGBA
と、テクスチャをフレームバッファにアタッチし、プラットフォームに関係なく、入力した正確なデータが返された後に呼び出し、glReadPixels
機能glTexImage2D
(または iOS での欠如) は同じままであることに注意してください。に必要なフレームバッファにアタッチするためだけに必要でした.これは、デバッグ目的でのみ気にします.tl;dr:データがすべてのプラットフォームでテクスチャに正しくアップロードされていることをかなり確信しています.)GL_RGBA
glReadPixels
他の情報:
gl_sim_texture_active_n
は 6 で、gl_sim_texture_buff_id
14 です (どちらも正当に取得され、エラーなしで取得されます)。glGetError()
orglCheckFramebufferStatus(GL_FRAMEBUFFER)
の前または後に両方を呼び出すと、クリーンが返されます。glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS)
8 を返します (テスト用の Android デバイスと同じです。
これがiOSではなくOSX/Androidで機能する理由がまったくわかりません。ここからどこへ行くべきかについての方向性は役に立ちます!