OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out

OpenGL ES和OpenGL的图标
关于“OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out”这个问题,做一阐述:
1.关键字的小修改大概由如下两点决定
第一,先考虑一个成本原则
一个关键字的定义是否修改,是由熟练程序员在使用该关键字时的思维成本来决定的。
当然,还有一个原则,是由初学者的学习成本来决定的,这时一条市场原则(微软喜欢这个原则)。
attribute改成in,varying 改成out,恰巧符合上面两条原则。
初学shading language的同学,意识不到uniform和attribute的却别,不能第一时间知道uniform是全体顶点都使用的同一个变量,而attribute是每一顶点各自的变量。需要经过长期的应用感受才知道其差别;
而且,每次使用的时候,都要在思维上承受这个比较绕的思维过程,一定程度上使得程序员不能很好地专注于应用问题的解决。当然了,经过长期的使用肯定会克服,但是成本太高。故,改成in和out在学习时和使用时,在思维上就自然了。
第二,这种改变是因为桌面OGL GLSL的改变引起的
OpenGL ES的Spec的形成原则:
很绕,总体原则如下三点:
1. 嵌入式版本的 OGL ES由OGL ES API 和 OGL ES SL构成,二者有自己独立的版本号,经常是不一样的。
如,ES2.0中的版本号2.0是强调API的版本号为2.0,而这一版的SL版本是ES SL1.10.
2. 桌面版本的 OpenGL 由OpenGL API和 GLSL构成,二者有自己独立的版本号,经常是不一样的。
如,OGL2.0中的2.0是强调API的版本号为2.0,而这一版的GLSL是第一次出现在OGL中,版本号为GLSL1.10.
3. 嵌入式OGL ES来源于某个版本的桌面OGL。
4. OGL ES1.0来源于桌面OGL1.3和OGL ES 1.1来源于桌面OGL1.5,它们都是固定管线,我们略过。ES 2.0开始,是可编程的管线。
2.OGL ES的版本来源
下面这两段彩色文字,可以只看粗体部分,简单说:
ES2.0 API来源于 桌面OGL2.0 ; ES2.0 SL1.10.17 来源于 GLSL1.20 .
由:https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf 的
The OpenGL ES Shading Language (also known as GLSL ES or ESSL) is based on theOpenGL Shading Language (GLSL) version 1.20.
ES3.0 API来源于 桌面OGL3.3 ; ES2.0 SL3.00.6 来源于 GLSL3.30.7 . 但是,OGL3.3的GLSL版本号是GLSL 3.30.6 ,修正号不同。
由:https://www.khronos.org/registry/gles/specs/3.0/GLSL_ES_Specification_3.00.pdf 的
1.1 Changes
This specification is derived fromOpenGL GLSL 3.3 revision 7.
GLSL1.20中,顶点属性,输入时使用的是attribute,输出时使用的是varying;
GLSL3.30中,顶点属性对应使用的是in和out
总之:OGL ES API都会自于某个版本的OGL API spec,并且ES SL会来源于与OGL API版本较近的GLSL spec,
3.OGL、OGL ES、DirectX的版本发布时间
另外一个很重要的事情:OGL比DX出现的早,而且通用。可参考OGL各个版本的spec的发布日期。
1992.1月 OpenGL 1.0 发布;
1995年 DirectX 1.0 发布,并且不太成功;
1997.1月OGL1.1发布,
1997年 DirectX 3.0 发布;
1998.3.16 OGL1.2发布;
1998.10 OGL1.2.1发布;
2001.8.14 OGL1.3发布;
2002年 Direct9.0发布,并不断修改,现在依然主流,后面几年有 DX9.0b 和 DX9.0c 发布;
2002年 OpenGL ES 1.0 公布,固定管线。
2002.7.24 OGL1.4 发布;
2003.7.29 OGL1.5发布;
2004.9.7 OGL 2.0 和 GLSL1.0 发布; OGL中开始出现shader语言,并在后面几年不断提高,出现了GLSL1.1 和GLSL1.2( glsl1.2是 ES2.0 SL的母版本 )
2005年 OpenGL ES 1.10 公布,固定管线。
2006.7.2 OGL2.1 发布 ,伴随GLSL1.20.8
2008.8.11 OGL3.0发布,伴随GLSL1.30.10, 其中的attribute varying等就已经改成了 in和out;
这段时间前后有DX10 和DX10.1发布,但不太流行;
2009年 OpenGL ES 2.0 公布,在OpenGL 2.0 和GLSL1.20基础上提炼而来。
2009.1 DX11 发布,加入了细分着色器;
2009.3.24 OGL3.1 发布, 伴随GLSL1.40.08 ;
2009.8.3 OGL3.2 发布, 伴随GLSL1.50.11 ,并且加入了几何着色器,出现三种shader;
2010.3.11 OGL3.3发布;同时 OGL4.0发布,伴随GLSL4.00.9 并且加入了细分着色器(ATI在2001年就首先设计出来了),出现四种shader(此后将OGLAPI版本号与GLSL版本号统一起来了);
2010.7.26 OGL4.1 发布,伴随GLSL4.10.6;
2011.8.8 OGL4.2发布,伴随GLSL4.20.11;
2011.10 DX11.1 发布;
2012 OpenGL ES 3.0 公布,在OpenGL 3.x 和 4.x的基础上增加了许多新的功能。
2012.8.6 OGL4.3发布,伴随GLSL4.30.8;
2013.6 DX11.2 发布;
2013.7.23 OGL4.4发布,伴随GLSL4.40.9 ;
2014.3 DX12发布; 这个把本增加了并行计算功能,应该会比较流行。
2016 OGL4.5 ,伴随GLSL4.50 ;
2016 OpenGL ES 3.1和3.2 公布,并且加入了细分着色器和几何着色器。 不要有侥幸心理了,未来的Andorid和iOS都会有这样的着色器编程,哈哈,学起来吧。知识量越多的一个图形库,掌握难度越大,功能也越强,开发的产品也就越人性化。
原文:OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out
OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out的更多相关文章
- 最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来
package com.example.home; import java.io.IOException; import java.io.InputStream; import javax.micro ...
- JSON-RPC 2.0 规范中文文档
链接地址如下 http://wiki.geekdream.com/Specification/json-rpc_2.0.html
- (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying
一:attribute .uniform 和 varying 都是glsl的变量的内存指示器(storage qualifiers),指明变量的内存特性 二:attribute attribute 是 ...
- OpenGL ES crash notes 01 - Nice to meet you
这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...
- OpenGL ES for Android 环境搭建
在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...
- Android OpenGL ES 开发
OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子 ...
- 短视频图像处理 OpenGL ES 实践
2017年,短视频正以其丰富的内容表现力和时间碎片化的特点,快速崛起,而短视频最具可玩性之处就在支持人脸识别的动态贴图和各种不同效果的美颜.滤镜等.那短视频动态贴纸.滤镜.美颜等功能究竟是如何实现的呢 ...
- OpenGL ES 简单教程
什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. ...
- 3D OpenGL ES
什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本OpenGL 的一个子集. ...
随机推荐
- 【Spring】14、SpringMVC拦截器的配置
拦截器: com.zk.interceptors.MyInterceptor 实现了 HandlerInterceptor接口,可以拦截@RequestMapping注解的类和方法 第一种方式 < ...
- 【Dubbo&&Zookeeper】2、 windows平台dubbo-admin管理平台搭建
一.前言 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin.通过dubb ...
- JS调用模式
在js中,一共4中调用方式.需要注意的是,调用方式中,this的指向问题. 函数调用模式 this丢失,debug会提示未定义相应属性.按照规范,需要将this赋值给that let myObj = ...
- Archlinux/Manjaro使用笔记-安装配置搜狗输入法步骤
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.安装qtwebkit-bin软件包解决qtwebkit无法编译安装问题 aurman -S qtwebkit-bin 二.安 ...
- html基本标签(慕课网)
html标签: 1.<q>标签,短文本引用(quote,引用) 注解:引用短文本,比如引用古人的一句话 ,注意引用的文本不需要再加双引号. <q>标签的真正关键点不是它的默认样 ...
- Web API与JWT认证
JWT(Json Web Token)定义了一种使用Json形式在网络间安全地传递信息的简洁开放的标准(RFC 7519).JWT使用数字签名确保信息是可信的. 一.Session认证和Token认 ...
- Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading
Expo大作战系列完结! 简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与 ...
- python爬虫之pyquery学习
相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再选取 元素的文本.属性等内容的获取 pyquery执行DOM操作.css ...
- 学习CGLIB与JDK动态代理的区别
动态代理 代理模式是Java中常见的一种模式.代理又分为静态代理和动态代理.静态代理就是显式指定的代理,静态代理的优点是由程序员自行指定代理类并进行编译和运行,缺点是一个代理类只能对一个接口的实现类进 ...
- Alpha冲刺! Day8 - 砍柴
Alpha冲刺! Day8 - 砍柴 今日已完成 晨瑶:写了部分gitkraken团队协作教程:讨论关于继承baseActivity因为需要参数无法通过override去实现函数,并且initData ...