最近研究安卓系统屏幕绘制这部分时,可谓是绞尽脑汁… 偶然得到家人的指点有了思路上的突破,实现了想要的功能。本篇文章结合<OpenGL编程指南>书籍的基础上,简单介绍一下OpenGL的结构。

OpenGL(Open Graphics Library)中文译为“开放图形库”,是用于渲染2D、3D图形的跨语言、跨平台的软件编程接口。OpenGL的简易版本OpenGL ES应用与android、ios等系统,图层硬件合成技术便是基于OpenGL对GPU的访问操作。早在1992年OpenGL就已经成为图像化行业的标准。

一个用来渲染图像的OpenGL程序需要执行的主要操作如下:

1.从OpenGL的几何图元中设置数据,用于构建形状;

2.使用不同的着色器(shader)对输入的图元数据执行计算操作,判断它们的位置、颜色,以及其他渲染属性;

3.最后,针对光栅化过程产生的每个片元执行片元着色器,从而决定这个片元的最终颜色和位置;

4.如果有必要,还需要对每个片元执行一些额外的操作,例如判断片元对应的对象是否可见,或者将片元的颜色与当前屏幕位置的颜色进行融合;

OpenGL是使用客户端——服务端的形式实现的,我们编写的应用程序可以看做客户端,而计算机图形硬件厂商所提供的OpenGL实现可以看做服务端。OpenGL的某些实现(例如X窗口系统的实现)允许服务端和客户端在一个网络内的不同计算机上运行。这种情况下,客户端负责提交OpenGL命令,这些OpenGL命令然后被转换为窗口系统相关的协议,通过共享网络传输到服务端,最终执行并产生图像内容。

OpenGL实现了我们通常所说的渲染管线,它是一系列数据处理过程,并且将应用程序的数据转换到最终渲染图像。自从OpenGL诞生以来,它的渲染管线已经发生了非常大的改变。

OpenGL首先接收用户提供的几何数据(顶点和几何图元),并且将它输入到一系列着色器阶段中进行处理,包括:顶点着色、细分着色(它本身包含两个着色器),以及最后的几何着色,然后它将被送入光栅化单元(rasterizer)。光栅化单元负责对所有剪切区域(clipping region)内的图元生成片元数据,然后对每个生成的片元都执行一个片元着色器。

下面介绍一些OpenGL ES常用API:

glBindFramebuffer()
    将framebuffer绑定到默认的FBO出,使FBO绑定状态恢复到默认状态;

glTexImage2D()
    生成一个指定范围的2D纹理(设备屏幕显示范围);

glCopyTexImage2D()
    将缓冲区内的像素拷贝到2D纹理范围中;

glUniform()系列函数
    指定Uniform的变量或数组的值为当前程序对象;

glUniformMatrix()系列函数
    指定矩阵或矩阵数组的值为当前程序对象(着色器使用);

glVertexAttribPointer()
    指定了渲染时索引值为 index 的顶点属性数组的数据格式和位置;

glViewport()
    设置OpenGL显示窗口位置和大小;

glDrawElements()
    从数组中获取数据渲染图元。能够通过较少的函数调用绘制多个几何图元;

glFinish()
    将缓冲区的指令立即送往硬件执行,需要等到硬件执行完成才能继续向下执行(同步方式),一般用来测试使用;

glFlush()
    将缓冲区的指令立即送往硬件执行,并且清空缓冲区,程序继续向下执行(异步方式),不需要等待执行结果。

浅谈OpenGL、OpenGL ES相关推荐

  1. 关于openGL, openGL ES, openVG及android中2D调用关系的报告

    关于openGL, openGL ES, openVG及android中2D调用关系的报告 http://blog.chinaunix.net/u3/99423/showart_2203591.htm ...

  2. es全文检索论文_浅谈使用ElasticSearch实现全文检索

    浅谈使用ElasticSearch实现全文检索 IDEADATA-iDSP-Yeun   2016年5月15日 现如今,无论是互联网信息还是企业内部每天产生的信息,都在以指数级增长,对于企业内部,每天 ...

  3. COCOS2DX 与 UNITY3D 的发展浅谈

    浅谈: 目前游戏界的发展趋势逐渐把游戏引擎当做一个比较成熟的中间件了,许多toolset和基础构建在不同游戏中是相通的,曾经有人比喻游戏引擎在不久的将来会像现在的操作系统一样,呈现出一种比较稳定的状态 ...

  4. 浅谈2011年上半年Java游戏领域动态

    浅谈2011年上半年Java游戏领域动态 时间过得真快,转瞬已是 2011 年 6 月,仿佛都能听到 2012 正率领天启四骑士向我们快速冲锋的马蹄声了.所以趁着世界还没毁灭,我就先来谈谈 2011 ...

  5. 浅谈软件开发方向之嵌入式

    软件开发是当前一个很热门的话题,可是你知道软件开发岗位都有哪些吗?其中又有什么联系呢?本文以软件开发的嵌入式方向,来聊聊这个问题. Linux IO(基本输入/输出)系统架构图 如果说互联网系统像一个 ...

  6. ajax感受,有什么缺点,浅谈ajax的优点与缺点

    AJAX (Asynchronous Javascript and XML) 是一种交互式动态web应用开发技术,该技术能提供富用户体验. 完全的AJAX应用给人以桌面应用的感觉.正如其他任何技术,A ...

  7. 浅谈基于SDL的2D纵版弹幕射击游戏相关经验心得

    浅谈基于SDL的2D游戏开发相关 前言:本人才疏学浅,大一新生一枚   写这篇文章的目是为了跟大家分享下自己的一些经验. 进入正题:首先本文这一切的一切都是基于SDL开发WINDOWS平台上的游戏.如 ...

  8. 浅谈Unity与VR产业,用Unity开发VR应用

    VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国VR产业仍在摸索阶段,亟缺复合型 ...

  9. 浅谈Unity与VR产业,用Unity开发第一款VR应用

    部分内容为整合与装载 浅谈VR VR(Virtual Reality的缩写,中文翻译-虚拟现实)概念早在80年代初就被提出来的,其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段. 中国 ...

  10. 浅谈网络游戏的设计——服务器端编程

    浅谈网络游戏的设计--服务器端编程 本游戏服务器端操作系统采用UNIX,因为UNIX是标准的服务器操作系统,可保证网络游戏的稳定性.因此,以下所有的编程都将针对UNIX进行. 服务器端的整体构架如下: ...

最新文章

  1. Matlab编程与数据类型 -- 开关语句switch/end
  2. 【SSH三个框架】Hibernate第八部分基础:经营-many关系
  3. java jediscluster_方便jediscluster操作的工具类
  4. Hibernate如何一个类映射两个表
  5. leetcode 208. Implement Trie (Prefix Tree) | 208. 实现 Trie 前缀树(Java)
  6. Codeforces Round #669 (Div. 2)
  7. python怎么开发工具_为程序员和新手准备的8大Python开发工具
  8. linux一切皆是文件_LINUX一切皆文件
  9. docker下centos7 systemctl启动报错 docker Failed to get D-Bus connection 报错
  10. IPv6-IPv4过渡技术详解及配置实例
  11. 中缀表达式转后缀表达式(非常简单易懂)
  12. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。报错...
  13. java百度贴吧一键签到,手机百度贴吧怎么一键签到?手机贴吧一键签到怎么用?
  14. 华为电脑Linux进pe,华为笔记本(HuaWei)如何进入BIOS设置U盘启动?
  15. 【数据分析】销售案例——会员分析
  16. Ubuntu美化开关机界面 - Linux
  17. 2015新款 MacBook 用心的测评与试用. 最轻薄的Mac上市
  18. 创建一个Rectangle类。 添加两个属性width、height,分别表示宽度和高度,添加计算矩形的周长和面积的方法。测试输出一个矩形的周长和面积。
  19. Linux下Socket编程之UDP原理
  20. 贩妖记 第三百七十五章,教授笔记

热门文章

  1. 工行高级经理林承军:工行基于 MySQL 构建分布式架构的转型之路
  2. JeeWx捷微2.4.1版本发布,JAVA微信管家平台(支持公众号、企业号)
  3. linwei_211 SVN错误:Attempted to lock an already-locked dir
  4. cycle/Pix2Pix 模型
  5. Java 中的日期与时间
  6. Linux用户管理案例(第二版)
  7. 经典假设检验理论记录一二
  8. sass编写高质量的css---(基础语法结构)
  9. python的argparse模块
  10. eclipse打开当前文件夹