博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL ES无法获取贴图数据原因
阅读量:4618 次
发布时间:2019-06-09

本文共 1397 字,大约阅读时间需要 4 分钟。

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

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

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

  1. 所有的OpenGL调用都在同一个线程来完成,否则会出现未知的问题(没试过在不同线程调用)
    1. 多线程本来就比单线程不好操控,除非对自己的逻辑和代码很有信心,否则,会出什么问题真的很难说
  2. 使用FBO提升效率(没试过不用FBO获取)
    1. 读取贴图数据的原理是将贴图与缓存绑定,再读取缓存数据,达到读取贴图数据的目的
  3. glReadPixels仅支持RGBA(至少3.0还不支持其他颜色格式)
    1. 我就是卡在这里,OpenGL还支持RGB,BGR,BGRA等,但是OpenGL ES只支持RGBA

函数代码:

1 static void GetPixelsFromTexture(void* texturePtr, void* dataPtr, int width, int width) 2 { 3 GLuint gltex = (GLuint)(size_t)(texturePtr);    //TextureID 4     glBindTexture(GL_TEXTURE_2D, gltex);    //Designated Texture ability 5  6     GLuint offscreen_framebuffer; 7     glGenFramebuffers(1, &offscreen_framebuffer);    //Create FBO 8     glBindFramebuffer(GL_FRAMEBUFFER, offscreen_framebuffer);    //Designated FBO ability 9     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, gltex, 0);    //Bind the FBO with Texture10     GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);11     if(status != GL_FRAMEBUFFER_COMPLETE) {12         LOGI("failed to make complete framebuffer object %x", status);13     }14 15     uint8_t* tempPtr = (uint8_t*)dataPtr;16     glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, dataPtr);    //Get pixels from PBO17 18     glBindTexture(GL_TEXTURE_2D, 0);19     glBindFramebuffer(GL_FRAMEBUFFER, 0);20 }

 

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

转载于:https://www.cnblogs.com/HuangWj/p/5997331.html

你可能感兴趣的文章
第一阶段冲刺个人总结
查看>>
iOS - 静态类库 打包 C,C++文件及和OC混编
查看>>
版本号严格遵守semver语义化标准
查看>>
JVM性能调优监控命令jps、jinfo、jstat、jmap+jhat、jstack使用详解
查看>>
BZOJ1977 [BeiJing2010组队]次小生成树 Tree
查看>>
Meta http-equiv属性详解(转)
查看>>
Git的初步学习
查看>>
字符串匹配 ?kmp : hash
查看>>
mongod.service: control process exited, code=exited status=1
查看>>
vue npm 安装
查看>>
SQL表值函数和标量值函数的区别
查看>>
loj #2007. 「SCOI2015」国旗计划
查看>>
大照片背景在网页设计中应用的精美作品范例(下篇)
查看>>
c# 发送邮件、附件 分类: C# 2014-12-...
查看>>
对360来说,江湖上再无“搜狗”这个传说
查看>>
composer
查看>>
OpenCV特征点检测——ORB特征
查看>>
mysql的csv数据导入与导出
查看>>
leetcode笔记:Pascal's Triangle
查看>>
java Hibernate UUID代码
查看>>