Opengl ES初识 (Opengl ES笔记)

一、Opengl ES 简介,这是摘自网络的Opengl es的简介:

    OpenGL ES (OpenGL for Embedded Systems) 是OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。

OpenGL ES - 嵌入式3D图形算法标准 。OpenGL ES 是免授权费的,跨平台的,功能完善的2D和3D图形应用程序接口API,它针对多种嵌入式系统专门设计 - 包括控制台、移动电话、手持设备、家电设备和汽车。它由精心定义的桌面OpenGL子集组成,创造了软件与图形加速间灵活强大的底层交互接口。 OpenGL ES 包含浮点运算和定点运算系统描述以及 EGL 针对便携设备的本地视窗系统规范。

现在主要有两个版本,OpenGL ES 1.x 针对固定管线硬件的,OpenGL ES 2.x 针对可编程管线硬件。OpenGL ES 1.0 是以 OpenGL 1.3 规范为基础的;OpenGL ES 1.1 是以 OpenGL 1.5 规范为基础的 ;OpenGL ES 2.0 则是参照 OpenGL 2.0 规范定义的。下面使用的是1.0版本。

二、Openg ES开发环境的答建。

1.Opengl es是针对嵌入式设备的,因而环境的答建是在某个平台开发环境基础上的。

2.需要Opengl es的SDK(开发包),包括头文件、lib文件、dll等。配置方法就跟一般的dll使用时的配置方法一样了,把开发包放到开发环境的程序目录下,使用时声明头文件,声明lib,把dll放到运行目录或windows下就搞定。

    3.一般网上下载的为比较低的版本,并且是不带硬件加速的,这种基本上可以在各种平台上正常地运行,包括pc上的模拟器。如果是芯片供应商提供的,如带硬件加速的开发包,则不是通用的了,须在特定的硬件平台下才能使用。因为其硬件驱动的实现是不同的,有些甚至差别巨大,如有可能,以后花点时间来写下。

三、最基本的程序流程。

   所有的Opengles程序的开头都是这几步,可以把它封装起来,让多个程序重用。

   初始化OpenGL ES分四步:调用eglInitialize()初始化egl库;调用eglChooseConfig()选择合适的framebuffer调用eglCreateWindowSurface创建EGLSurface;调用eglCreateContext创建RenderContext(RC)。

    1. 获取Display。

    Display代表显示器,在有些系统上可以有多个显示器,也就会有多个Display。获得Display要调用EGLboolean eglGetDisplay(NativeDisplay dpy),参数一般为 EGL_DEFAULT_DISPLAY 。该参数实际的意义是平台实现相关的,在X-Window下是XDisplay ID,在MS Windows下是Window DC。

    2. 初始化egl。

    调用 EGLboolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor),该函数会进行一些内部初始化工作,并传回EGL版本号(major.minor)。

    3. 选择Config。

    所谓Config实际指的是FrameBuffer的参数,在MS Windows下对应于PixelFormat,在X-Window下对应Visual。一般用EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config),其中attr_list是以EGL_NONE结束的参数数组,通常以id,value依次存放,对于个别标识性的属性可以只有 id,没有value。另一个办法是用EGLboolean eglGetConfigs(EGLDisplay dpy, EGLConfig * config, EGLint config_size, EGLint *num_config) 来获得所有config。这两个函数都会返回不多于config_size个Config,结果保存在config[]中,系统的总Config个数保存 在num_config中。可以利用eglGetConfig()中间两个参数为0来查询系统支持的Config总个数。

Config有众多的Attribute,这些Attribute决定FrameBuffer的格式和能力,通过eglGetConfigAttrib ()来读取,但不能修改。

    4. 构造Surface。

    Surface实际上就是一个FrameBuffer,通过 EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig confg, NativeWindow win, EGLint *cfg_attr) 来创建一个可实际显示的Surface。系统通常还支持另外两种Surface:PixmapSurface和PBufferSurface,这两种都不 是可显示的Surface,PixmapSurface是保存在系统内存中的位图,PBuffer则是保存在显存中的帧。

Surface也有一些attribute,基本上都可以故名思意, EGL_HEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL,通过eglSurfaceAttrib()设置、eglQuerySurface()读取。

    5. 创建Context。

    OpenGL的pipeline从程序的角度看就是一个状态机,有当前的颜色、纹理坐标、变换矩阵、绚染模式等一大堆状态,这些状态作用于程序提交的顶点 坐标等图元从而形成帧缓冲内的像素。在OpenGL的编程接口中,Context就代表这个状态机,程序的主要工作就是向Context提供图元、设置状 态,偶尔也从Context里获取一些信息。

用EGLContext eglCreateContext(EGLDisplay dpy, EGLSurface write, EGLSurface read, EGLContext * share_list)来创建一个Context。

6. 进行绘制环境设置

清除各个缓冲区,通过glViewport()设置视口,glMatrixMode()设置投影模式等。

    7 绘制。

应用程序通过OpenGL API进行绘制,一帧完成之后,调用eglSwapBuffers(EGLDisplay dpy, EGLContext ctx)来显示。

四、 以下为两个比较有用的进行系统Opengl ES学习的网站。

         http://embedded.org.ua/opengles/lessons.html

      http://www.khronos.org/opengles/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值