梳理 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 ...
随机推荐
- SqlSugar操作Oracle的dblink时候@符号问题
用的这个版本,作者忘记删除Oracle中的代码了....下个版本作者应该就会更新了,到时候就不会存在这个问题,这里记录一下. 引用nuget出现的问题: 使用dblink的时候,查询的时候需要带@符号 ...
- 阿里云服务器redis启动绑定ip 开放端口仍无法访问问题
今天使用云服务器其redis 始终无法访问.redis.conf 这个配置文件也是改了又改.最后发现 执行redis启动命令时没有带上配置文件.仍然使用默认配置. src/redis-server ...
- Firewalld共享上网及本地yum仓库搭建
1.firewalld共享上网 1.服务端操作(有外网的服务器) 1.开启防火墙并加入开机自启动 [root@zeq ~]# systemctl start firewalld [root@zeq ~ ...
- simpleXML技术解析xml文件(php)
1.simpleXML的核心思想:以面向对象的方法来操作xml文件 此技术可以将xml文件的所有元素都转成对象.会返回一个对象数组,再用foreach遍历,即可得到元素的名称,内容,和属性值. tes ...
- python 方法解析顺序 mro
一.概要: mor(Method Resolution Order),即方法解析顺序,是python中用于处理二义性问题的算法 二义性: 1.两个基类,A和B都定义了f()方法,c继承A和B那么C调用 ...
- 服务器空间不足导致mysql服务器无法运行
今天有朋友请我帮忙解决一个问题,他公司服务器mysql数据库一直连接失败.登录服务期之后发现服务器空间占满了,导致mysql不能启动. 下面说解决方法: 首先查看空间占用,发现空间占满了 df -h ...
- WordPress4.9 最新版本网站安全漏洞详情与修复
wordpress 目前互联网的市场占有率较高,许多站长以及建站公司都在使用这套开源的博客建站系统来设计网站,wordpress的优化以及html静态化,深受google以及搜索引擎的喜欢,全世界大约 ...
- ctf题目writeup(4)
2019.1.31 题目:这次都是web的了...(自己只略接触隐写杂项web这些简单的东西...) 题目地址:https://www.ichunqiu.com/battalion 1. 打开链接: ...
- count_char
import java.util.Scanner; public class count_char { public static void main(String args[]) { int cou ...
- 毕业2年 Summary
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/135 看了下去年写毕业一周年总结的时间:2017-6-16,今天 ...