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 与 GLSL 版本

OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out的更多相关文章

  1. 最新广商小助手 项目进展 OpenGL ES 3D在我项目中引用 代码太多只好选重要部分出来

    package com.example.home; import java.io.IOException; import java.io.InputStream; import javax.micro ...

  2. JSON-RPC 2.0 规范中文文档

    链接地址如下 http://wiki.geekdream.com/Specification/json-rpc_2.0.html

  3. (OpenGL ES 2.0 Shading Language) attribute 、uniform 和 varying

    一:attribute .uniform 和 varying 都是glsl的变量的内存指示器(storage qualifiers),指明变量的内存特性 二:attribute attribute 是 ...

  4. OpenGL ES crash notes 01 - Nice to meet you

    这篇笔记完全参照<OpenGL.ES.3.0.Programming.Guide.2nd.Edition>,摘出部分内容只为学习参考. 为什么要用英文:无论是D3D的SDK还是OES的Sp ...

  5. OpenGL ES for Android 环境搭建

    在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...

  6. Android OpenGL ES 开发

    OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子 ...

  7. 短视频图像处理 OpenGL ES 实践

    2017年,短视频正以其丰富的内容表现力和时间碎片化的特点,快速崛起,而短视频最具可玩性之处就在支持人脸识别的动态贴图和各种不同效果的美颜.滤镜等.那短视频动态贴纸.滤镜.美颜等功能究竟是如何实现的呢 ...

  8. OpenGL ES 简单教程

    什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. ...

  9. 3D OpenGL ES

    什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本OpenGL 的一个子集. ...

随机推荐

  1. Android开发——adb连接夜神模拟器

    夜神模拟器安装完之后,打开模拟器,在cmd命令行中进入到夜神模拟器的bin目录 本来以为不支持中文的,没想到确实支持的哈哈 之后输入adb connect 就能成功连接上了 PS:在Android S ...

  2. Mysql锁原理浅谈

    锁类型/引擎 行锁 表锁 页锁 MyISAM 有 InnoDB 有 有 BDB(被InnoDB取代) 有 有 锁的分类 表锁:开销小,加锁快,不会死锁,粒度大,冲突率高,并发低. 行锁:开销大,加锁慢 ...

  3. Kubernetes 的几个重要概念

    Cluster Cluster 是计算.存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用. Master Master 是 Cluster 的大脑,它的主要职责是调度,即 ...

  4. sql server: left join 重复数据

    ---涂聚文 2017-9-28 SELECT VipExamMailProjectId,VipExamMailStaffID FROM VipExamMailRecord WHERE VipExam ...

  5. FHQ Treap小结(神级数据结构!)

    首先说一下, 这个东西可以搞一切bst,treap,splay所能搞的东西 pre 今天心血来潮, 想搞一搞平衡树, 先百度了一下平衡树,发现正宗的平衡树写法应该是在二叉查找树的基础上加什么左左左右右 ...

  6. fetch发送Form Data请求并携带cookie

    今天我们来说说如何fetch发送Form Data请求并携带cookie,直接进入正题好吧,别问我今天为啥不在开始吹两句了,累到一句牛逼不想吹...... 步骤1: 设置头部,"Conten ...

  7. WebGL学习笔记(一)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 (一)WebGL是什么? WebGL是一门在网页上显示三维图形的技术,你可以把它理解为把OpenGL从C/S端搬到了B ...

  8. Element隐藏组件:scrollbar

    scrollbar是用来替代浏览器原生滚动条的组件,element的文档中并没有对scrollbar的描述. 使用方法:以<el-scrollbar/>包裹要滚动的元素,并设置固定高度.在 ...

  9. asp.net学习——Response对象

    (2011-03-29 07:33:03) 转载▼ 标签: 杂谈 分类: asp.net学习 响应的缓冲输出:为了提高服务器的性能,asp.net向浏览器Write的时候默认并不会每Write一次都会 ...

  10. Linux下postgresql数据库部署与配置

    1.检查postgresql是否已经安装:rpm -qa | grep postgres 2.检查PostgreSQL 安装位置:rpm -qal | grep postgres 3.卸载Postgr ...