2016-09-21 21 views
5

我有代碼只是一些上傳數據做作到紋理(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_ALPHAGL_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上工作任何方向重新:從這裏去哪裏將是很有幫助!

回答