梳理 Opengl ES 3.0 (一)宏观着眼
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 (一)宏观着眼的更多相关文章
- 梳理 Opengl ES 3.0 (二)剖析一个GLSL程序
OpenGL ES shading language 3.0 也被称作 GLSL,是个 C风格的编程语言. Opengl ES 3.0内部有两种可编程处理单元,即Vertex processor和Fr ...
- 梳理 Opengl ES 3.0 (三)顶点坐标变换
先来个宏观上的理解: 其实这块逻辑是个标准流程,而且其他地方介绍的也很多了,这里简单提下. 坐标转换,其实是不同坐标系之间的变换,一个渲染顶点,要想让它呈现在屏幕上的某个位置,是需要让这个顶点经过一个 ...
- 梳理 Opengl ES 3.0 (五)shader运行原理
先来看看一张图 shader都是在运行时编译和执行的,每个shader都有一个main函数作为它的入口. vertex shader的功能有两个:一个是计算顶点坐标变换,另一个就是为片元shader计 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- 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, ...
- OpenGL ES 3.0 基础知识
首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...
- 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, ...
- Android OpenGL ES 3.0 纹理应用
本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...
随机推荐
- intellij idea下载安装以及创建项目(输出Hello World)
主题一:下载 第一:可以百度下载 第二:直接进行官网链接下载地址:http://www.jetbrains.com/idea/ 第一步: 第二步: 下载完成后进行安装 主题二:安装 点击Next速度可 ...
- data-ng-disabled指令
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- ng-repeat 指令(带有数组)
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 大白话解释IP多播
多播引入 比方说我是一个班主任,管着三个班,每个班30个人,每个班有自己的班长.领导让我宣传19大视 频报告,我这里有源文件.对于普通的单播我需要复制90个副本,给各个班长每人30份,然后班 长在自己 ...
- C++的抽象类、虚函数、虚基类和java的抽象类和接口
简单整理如下: C++虚函数 == java普通函数 C++纯虚函数 == java抽象函数 C++抽象类 == java抽象类 C++虚基类(全都是纯虚函数) == java接口
- rest_framework--序列化组件
#####序列化组件##### 一.什么是序列化 在python中一切皆对象,把对象从内存中变成可存储或传输的过程称之为序列化. 你写一个django项目肯定是有前后端交互的吧,虽然django也可以 ...
- WebGL学习笔记(3)
根据上篇笔记,在对3D对象可进行普通的控制后,以及学习了http://hiwebgl.com的教程第10章内容:世界模型的载入以及控制镜头移动,经过多次调试矩阵代码,已经可以实现在世界中旋转镜头/控制 ...
- FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链
0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...
- [异常笔记]required a bean of type 'org.quartz.JobExecutionContext' that could not be found
*************************** APPLICATION FAILED TO START *************************** Description: Par ...
- 【ospf-链路验证】
根据项目需求搭建好拓扑图 配置RT1的环回口IP和G0/0/0IP地址 开启RT1接口ospf认证,配置接口密码为H3C 配置RT1的ospf区域 同理 开启RT2接口ospf认证,配置接口密码为g0 ...