在我的android应用程序中,我使用mipmap数组的纹理。
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureHandle);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, filter);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);纹理的初始尺寸为1024x1024。我需要纹理:
OpenGL有从mipmap数组访问纹理的api吗?
发布于 2014-11-16 16:22:20
Full OpenGL有一个用于此目的的glGetTexImage()调用。但是它在任何版本的OpenGL ES中都是不可用的,直到当前的ES3.1。
无需此调用,您可以将纹理设置为FBO附件,然后使用glReadPixels()读取内容。读取级别lev
int[] fboIds = new int[1];
GLES20.glGenFramebuffers(1, fboIds, 0);
int fboId = fboIds[0];
glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fboId);
glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
GLES20.GL_TEXTURE_2D, mTextureHandle, lev);
glReadPixels(...);
glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);这种方法在某种程度上受到限制,因为它只适用于颜色可渲染的纹理格式。其他格式作为FBO附件无效。在ES2.0中,保证颜色可呈现的唯一格式是RGBA4444、RGB5_A1和RGB565.许多设备都有扩展,增加了对RGB8和RGBA8等格式的支持。
其次,最好的方法是用纹理呈现一个四角体,然后用glReadPixels()读取结果。但是,对呈现目标的格式也会有相同的限制。例如,如果您的纹理是RGBA8,并且您的设备不支持对RGBA8曲面进行渲染,则使用这种方法您将失去精度。
https://stackoverflow.com/questions/26954930
复制相似问题