我有代碼只是一些上傳數據做作到紋理(0,0,0,1):GL紋理採樣器總是在iOS返回vec4(但是在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);
和代碼從紋理着色我只是樣品:
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
,重視質感的幀緩衝,然後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上工作任何方向重新:從這裏去哪裏將是很有幫助!