OpenGL ES无法获取贴图数据原因

2022-11-24,,,,

最近在做一个项目,要从贴图获取图像数据,查了很多资料,也琢磨很久,获取到的数据都是0。终于在一次偶然的机会,发现了端倪,成功了。

不得不说这“一分灵感”真的很重要

以下是在获取贴图数据时的注意事项:

    所有的OpenGL调用都在同一个线程来完成,否则会出现未知的问题(没试过在不同线程调用)

      多线程本来就比单线程不好操控,除非对自己的逻辑和代码很有信心,否则,会出什么问题真的很难说

    使用FBO提升效率(没试过不用FBO获取)

      读取贴图数据的原理是将贴图与缓存绑定,再读取缓存数据,达到读取贴图数据的目的

    glReadPixels仅支持RGBA(至少3.0还不支持其他颜色格式)

      我就是卡在这里,OpenGL还支持RGB,BGR,BGRA等,但是OpenGL ES只支持RGBA

函数代码:

 static void GetPixelsFromTexture(void* texturePtr, void* dataPtr, int width, int width)
{
GLuint gltex = (GLuint)(size_t)(texturePtr); //TextureID
glBindTexture(GL_TEXTURE_2D, gltex); //Designated Texture ability GLuint offscreen_framebuffer;
glGenFramebuffers(, &offscreen_framebuffer); //Create FBO
glBindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer); //Designated FBO ability
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gltex, ); //Bind the FBO with Texture
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status != GL_FRAMEBUFFER_COMPLETE) {
LOGI("failed to make complete framebuffer object %x", status);
} uint8_t* tempPtr = (uint8_t*)dataPtr;
glReadPixels(, , width, height, GL_RGBA, GL_UNSIGNED_BYTE, dataPtr); //Get pixels from PBO glBindTexture(GL_TEXTURE_2D, );
glBindFramebuffer(GL_FRAMEBUFFER, );
}

结论由试验所得,如有错误,望指出

OpenGL ES无法获取贴图数据原因的相关教程结束。

《OpenGL ES无法获取贴图数据原因.doc》

下载本文的Word格式文档,以方便收藏与打印。