EGLImage代表一种由EGL客户API(如OpenGL,OpenVG)创建的共享资源类型。它的本意是共享2D图像数据,但是并没有明确限定共享数据的格式以及共享的目的,所以理论上来讲,应用程序以及相关的客户API可以基于任意的目的创建任意类型的共享数据。

关于EGLImage的一种使用情景就是通过它来创建一个2D纹理。相关函数原型声明如下:

EGLAPI EGLImageKHR EGLAPIENTRYeglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target,EGLClientBuffer buffer, const EGLint *attrib_list);

这里我们主要关注下target,buffer参数。target决定了创建EGLImage的方式,例如在Android系统中专门定义了一个称为EGL_NATIVE_BUFFER_ANDROID的Target,支持通过ANativeWindowBuffer创建EGLImage对象,而Buffer则对应创建EGLImage对象时使用数据。

使用方式如下:

假设我们通过Gralloc模块创建了一个ANativeWindowBuffer对象srcBuf,它将被当作EGLClientBuffer类型的参数传递给上述函数,调用形式如下:

EGLImageKHR eglSrcImage =eglCreateImageKHR(eglDisplay, EGL_NO_CONTEXT,

                                                                                    EGL_NATIVE_BUFFER_ANDROID,

                                                                                    (EGLClientBuffer)&sSrcBuffer,0);

创建了一个EGLImage对象后,我们可以通过它创建一个2D纹理对象,示例如下:

         glGenTextures(1,&texID);

         …

 

         glBindTexture(GL_TEXTURE_2D,texID);

    …

 

         glEGLImageTargetTexture2DOES(GL_TEXTURE_2D,eglSrcImage);//相当于一般情况下的glTexImage2D的效果

如果EGLClientBuffer的数据是YUV格式的,还可以使用纹理Target为:GL_TEXTURE_EXTERNAL_OES, 该Target也是主要用于从EGLImage中产生纹理的情景,并且它与GL_TEXTURE_2D不同,它只能用于此种情景,也就是说gl*Tex*Image*( GL_TEXTURE_EXTERNAL_OES,…)是非法的。

这种创建纹理的方式使得显示一些OpenGL ES本身并不支持的图像格式的数据成为可能,因为它将格式支持相关的工作移到到了EGLImage创建函数当中。

转载于:https://my.oschina.net/fuyajun1983cn/blog/263854

EGLImage与纹理相关推荐

  1. android 相机纹理,Android平台Camera实时滤镜实现方法探讨(五)--GLSurfaceView实现Camera预览...

    前面有一篇探讨了如何在片段着色器中将YUV数据转换为RGB数据并显示,但采用samplerExternalOES将SurfaceTexture作为OpenGL外部纹理,需要使用GL_TEXTURE_E ...

  2. Mediacodec 如何硬件解码到纹理的

    Mediacodec 如何硬件解码到纹理的 背景: 网上很多关于mediacodec,surface ,surfacetexture的源码分析,以及内部原理,但是都局限于各自的内容,今天我们就从med ...

  3. openxr runtime Monado 源码解析 源码分析:CreateSwapchain 画布 HardwareBuffer共享纹理 渲染线程 xrEndeFrame comp_renderer

    monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码 ...

  4. CUDA C 纹理提取Texture Fetching

    CUDA C 纹理提取Texture Fetching 一.参数曲面的纹理 使用纹理指定参数曲面属性. 二.CUDA C 纹理获取开发 用于计算纹理函数,根据纹理引用的各种属性返回的值的公式(请参见纹 ...

  5. 虚拟纹理与几何图像技术

    虚拟纹理与几何图像技术 一. 基本图形学概念 图1. 几何与纹理. 曲面一般表示成三角网格和纹理图像,三角网格表示曲面的几何拓扑信息,纹理图像给出曲面的颜色材质等信息.将三角网格映射到平面区域的过程被 ...

  6. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现

    ** 数字图像的检索 下载地址:代码.数据集下载地址 如需论文请联系:hqucuihao@163.com ** 1. 摘要 随着互联网发展的日新月异,人们对于信息的需求不再是简单的文字,大量的图像.语 ...

  7. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)

    该程序实现的功能为:检索出指定的图像文件,并从检索出的图像中检索出指定的物体 . 1,主程序为Recognition和Recognition. 2.颜色特征,形状特征,纹理特征为对应的各子程序. 3. ...

  8. CS131专题-8:图像纹理

    目录 1 什么是图像纹理 1.1 不规则纹理 1.2 规则纹理 2 纹理描述(提取方法) 3 纹理滤波器组 4 一些滤波器提取的纹理效果 5 使用高维向量描述纹理 6 图像纹理提取的应用 应用1:图像 ...

  9. Open3DGen:从RGB-D图像重建纹理3D模型的开源软件

    点云PCL免费知识星球,点云论文速读. 文章:Open3DGen: Open-Source Software for Reconstructing Textured 3D Models from RG ...

最新文章

  1. 【转】Traceview的使用
  2. Linux系统命令三剑客之 awk
  3. QT5 动态链接库的创建和使用
  4. 【CodeForces - 438D】The Child and Sequence(线段树区间取模操作)
  5. 火热的云计算,你知道这些吗?
  6. idea取消vim模式
  7. mybatis注解的使用
  8. vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法 1
  9. 二阶切比雪夫多项式实现(scala版、python版)
  10. 一个在线的文件密码破解网站( rar文件、zip文件、pdf文件、ppt文件、xls文件)
  11. Docker启动报错“Job for docker.service failed because a configured resource limit was exceeded.
  12. LIN雨量传感器:拆解最低配的传感器8U0955559
  13. FFmpeg获取视频旋转角度rotate获取不到的问题解决
  14. 西电计科操作系统实验
  15. android 检测是否模拟器,Android全面检测设备是否模拟器
  16. ftp服务器为我方,对方发送数据,巡检光衰数据导入es
  17. layui 怎么设置点击图片放大_layui图片如何放大
  18. 嵌入式Linux的内核编译
  19. 嵌入式C语言自我修养:从芯片、编译器到操作系统-习题、笔记
  20. 2008北京九华山庄itpub年会有感

热门文章

  1. nonatomic,assign,copy,retain的区别
  2. u-boot-1.3.4移植到mini2440+128M nand boot(3)
  3. spring-amqp生产者手动ACK
  4. linux环境: shell初始化文件, for TCSH, CSH
  5. js运动 运动效果留言本
  6. python paramiko模块中设置执行命令超时值
  7. 繁星代码生成器0.91版 【视频】
  8. 使用PowerDesigner创建数据库表
  9. linux 查看 全部网卡 虚拟网卡 物理网卡
  10. php 输出 echo、print_r、print、var_dump 、die 区别