2011-06-10 46 views
0

我用下面的代碼獲取深度緩衝:glReadPixels(Depth_Component)不是在Android的OpenGL的ES20工作

FloatBuffer pixels = ByteBuffer 
    .allocateDirect(4).order(ByteOrder.nativeOrder()).asFloatBuffer(); 

GLES20.glReadPixels(pointx, pointy, 1, 1, 
    GLES20.GL_DEPTH_COMPONENT16, GLES20.GL_FLOAT, pixels); 

問題是,無論哪點我請求,像素是給我0.0;

我啓用以下中onSurfaceCreated

GLES20.glEnable(GLES20.GL_DEPTH_TEST); 
GLES20.glEnable(GLES20.GL_BLEND); 
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 
GLES20.glDepthFunc(GLES20.GL_LEQUAL); 
GLES20.glDepthMask(true); 
GLES20.glClearColor(1, 1, 1, 1); 

我一直在這個問題掙扎了好幾天!請幫忙。

回答

4

根據OpenGL ES 2.0文檔,glReadPixels()不支持讀取深度緩衝區。 glGetError()返回什麼?

+0

Thanks @Martin。我從來沒有注意到這個變化。那麼,不,geterror返回0;順便說一句,所以我怎樣才能從gles2讀取深度緩衝區? – xandy 2011-06-10 09:01:00

+0

一個解決方案是做一個單獨的渲染過程,在這裏你使用着色器來填充具有深度值的顏色緩衝區。這是我以前在DirectX 9上必須要做的。 – 2011-06-10 09:09:27

+0

另外,也許這可能有所幫助:http://stackoverflow.com/questions/4041682/android-opengl-es-framebuffer-objects-rendering-to-紋理 – 2011-06-10 09:14:40