Opengl ES 可以理解为是在嵌入式设备上工作的一层用于处理图形显示的软件,是Opengl 的缩水版本。

下图是它的工作流程示意图:

注意图中手机左边的EGL Layer

Opengl ES是跨平台(即可支持不同操作系统)的软件。它如果想调用与系统相关,与硬件相关的操作,并不是通过直接访问操作系统,而是经过了一个中间层,即 EGL Layer,这个EGL layer当然也是Opengl es不可分割的一部分,失去了它,自然也就失去了和操作系统交互的方式了。不同的系统,要实现自己的EGL,比如在IOS系统下,定义了一个EAGL对象来实现EGL;在Android平台下,定义了GLView类,通过GLView.EGLContextFactory来提供EGL。EGL究竟提供了哪些内容,可以参考这个官方链接

Opengl ES 3.0这个软件的一代即1.1版本,使用的是固定式流水线;目前的2.0/3.0版本可理解为可修改式流水线。流水线这个词非常适合描述这个软件的工作流程,其实就是个标准的代码顺序执行的过程吧,应该是和并行相对的词。

先看看这个固定流水线的图:

后续的解读会逐步展开每一个阶段的具体过程。

可编程流水线

所谓“可修改”在程序员看来自然就是可编程了,所谓可编程,就是可以开放方法,可以让开发者自定义方法,这个写出来的方法,就是程序代码了。普通代码是在CPU下运行,让CPU去处理代码。而这种为渲染流水线制作的代码,是放在GPU上运行的,被称为 Shader 。

在前述固定管线长长的流水作业过程中,可编程管线强制要求上层应用程序员使用Shader来完成其中的某些步骤。

简单提下 Shader

Opengl ES 3.0内部有两种可编程处理单元,即Vertex processor和Fragment processor,分别用来处理Vertex shader executable和Fragment shader executable。注意,Opengl ES 3.0不支持Geometry Shader。上图中,紫色部分就是可执行体了,即 executable .

不同平台上的开发 

1.Android。可以使用包含了OpenGL es的基于java的框架来使用java语言实现相关功能。还可以使用Native Developement Kit(NDK)来使用C/C++语言开发,这个时候JNI会作为JAVA核心框架与NDK C++代码之间的桥梁。

2.IOS。Opengl es 3.0在IOS 7以及以后的版本里进行了完整的实现。也就是Iphone 5s以后的版本。Mac系统提供了Xcode IDE来开发IOS应用,可以发布到iphone,ipad,ipod上,opengl es 3.0要求xcode 5以上版本。即IOS7 SDK + XCODE 5.0

梳理 Opengl ES 3.0 (一)宏观着眼的更多相关文章

  1. 梳理 Opengl ES 3.0 (二)剖析一个GLSL程序

    OpenGL ES shading language 3.0 也被称作 GLSL,是个 C风格的编程语言. Opengl ES 3.0内部有两种可编程处理单元,即Vertex processor和Fr ...

  2. 梳理 Opengl ES 3.0 (三)顶点坐标变换

    先来个宏观上的理解: 其实这块逻辑是个标准流程,而且其他地方介绍的也很多了,这里简单提下. 坐标转换,其实是不同坐标系之间的变换,一个渲染顶点,要想让它呈现在屏幕上的某个位置,是需要让这个顶点经过一个 ...

  3. 梳理 Opengl ES 3.0 (五)shader运行原理

    先来看看一张图 shader都是在运行时编译和执行的,每个shader都有一个main函数作为它的入口. vertex shader的功能有两个:一个是计算顶点坐标变换,另一个就是为片元shader计 ...

  4. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  5. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)

    在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...

  6. Beginning OpenGL ES 2.0 with GLKit Part 1

    Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...

  7. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  8. OpenGL ES 3.0 点,线,三角形绘制形式总结

    OpenGL ES 3.0 顶点     -1,  1, 0, -0.5f,  0, 0,     0, -1, 0,    -1,  0, 0, 0.5f,   0, 0,     1, -1,   ...

  9. Android OpenGL ES 3.0 纹理应用

    本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...

随机推荐

  1. intellij idea下载安装以及创建项目(输出Hello World)

    主题一:下载 第一:可以百度下载 第二:直接进行官网链接下载地址:http://www.jetbrains.com/idea/ 第一步: 第二步: 下载完成后进行安装 主题二:安装 点击Next速度可 ...

  2. data-ng-disabled指令

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  3. ng-repeat 指令(带有数组)

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. 大白话解释IP多播

    多播引入 比方说我是一个班主任,管着三个班,每个班30个人,每个班有自己的班长.领导让我宣传19大视 频报告,我这里有源文件.对于普通的单播我需要复制90个副本,给各个班长每人30份,然后班 长在自己 ...

  5. C++的抽象类、虚函数、虚基类和java的抽象类和接口

    简单整理如下: C++虚函数 == java普通函数 C++纯虚函数 == java抽象函数 C++抽象类 == java抽象类 C++虚基类(全都是纯虚函数) == java接口

  6. rest_framework--序列化组件

    #####序列化组件##### 一.什么是序列化 在python中一切皆对象,把对象从内存中变成可存储或传输的过程称之为序列化. 你写一个django项目肯定是有前后端交互的吧,虽然django也可以 ...

  7. WebGL学习笔记(3)

    根据上篇笔记,在对3D对象可进行普通的控制后,以及学习了http://hiwebgl.com的教程第10章内容:世界模型的载入以及控制镜头移动,经过多次调试矩阵代码,已经可以实现在世界中旋转镜头/控制 ...

  8. FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链

    0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...

  9. [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found

    *************************** APPLICATION FAILED TO START *************************** Description: Par ...

  10. 【ospf-链路验证】

    根据项目需求搭建好拓扑图 配置RT1的环回口IP和G0/0/0IP地址 开启RT1接口ospf认证,配置接口密码为H3C 配置RT1的ospf区域 同理 开启RT2接口ospf认证,配置接口密码为g0 ...