EGLImage与纹理
2014-03-17 16:50
309 查看
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创建函数当中。
关于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创建函数当中。
相关文章推荐
- EGLImage与纹理
- EGLImage与纹理
- EGLImage与纹理
- EGLImage与纹理
- EGLImage与纹理
- OpenGL学习笔记之加载纹理
- webgl学习笔记五-纹理
- 游戏中纹理压缩格式之Texture压缩纹理特殊处理
- 【笔记】《WebGL编程指南》学习-第5章颜色与纹理(3-使用多幅纹理))
- OPENCV 第一课 纹理合成
- android 使用OPENGL ES实现纹理拉伸效果-纹理映射基础
- 图像检索:几种基于纹理特征的图像检索算法
- osgEarth细节纹理案例 14.detail_texture.earth
- Unity Shader 学习笔记(17) 程序纹理(Procedural Texture)、程序材质(Procedural Materials)
- openGL可编程笔记四——支持多重纹理并封装
- 程序纹理应用之静态纹理生成
- ETC1+Alpha纹理压缩自动化脚本
- cocos studio 加载json文件到场景后重新渲染纹理失败
- Fragment shader---2D纹理采样3
- Ogre动态纹理(转)