首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL ES =访问mipmap数组

OpenGL ES =访问mipmap数组
EN

Stack Overflow用户
提问于 2014-11-16 07:45:42
回答 1查看 738关注 0票数 0

在我的android应用程序中,我使用mipmap数组的纹理。

代码语言:javascript
复制
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。我需要纹理:

  • 512x512 (1级)
  • 256x256 (2级)
  • 128x128 (3级)

OpenGL有从mipmap数组访问纹理的api吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-16 16:22:20

Full OpenGL有一个用于此目的的glGetTexImage()调用。但是它在任何版本的OpenGL ES中都是不可用的,直到当前的ES3.1。

无需此调用,您可以将纹理设置为FBO附件,然后使用glReadPixels()读取内容。读取级别lev

代码语言:javascript
复制
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中,保证颜色可呈现的唯一格式是RGBA4444RGB5_A1RGB565.许多设备都有扩展,增加了对RGB8RGBA8等格式的支持。

其次,最好的方法是用纹理呈现一个四角体,然后用glReadPixels()读取结果。但是,对呈现目标的格式也会有相同的限制。例如,如果您的纹理是RGBA8,并且您的设备不支持对RGBA8曲面进行渲染,则使用这种方法您将失去精度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26954930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档