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

原文地址:https://www.cnblogs.com/rainbow70626/p/10226734.html

时间: 2025-01-01 14:12:38

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

Chapter 1 : OpenGLES 3.0 简介 (2)—— OpenGL ES 3.0

管道 如前所属,本书讲解的API版本是OpenGL ES 3.0.本书的目标是,深入讲解OpenGL ES 3.0的技术细节,给出具体的例子来说明如何使用某个特性,并且讨论了各种性能优化技术.当您读完这本书,您应该可以对OpenGL ES 3.0API有一个很好的把握.您将可以轻松的写出让人新服的OpenGL ES 3.0的应用程序,并且您不必通过阅读多种OpenGL ES的规范来搞懂某个特性是如何工作的. OpenGL ES 3.0实现了可编程着色图形管道.OpenGL ES 3.0规范包含两

OpenGL ES 2.0基本概念

1. OpenGL ES 2.0可编程管道 OpenGL负责把三维空间中的对象通过投影.光栅化转换为二维图像,然后呈现到屏幕上. 上图黄色部分(Vertex Shader和Fragment Shader)为此管道的可编程部分.整个管道包含以下两个规范: 1) OpenGL ES 2.0 API specification 2) OpenGL ES Shading Language Specification (OpenGL ES SL) 详细流程图如下: 此流程把三维数据变换为可以显示的二维数据

opengl ES

1. OpenGL ES 2.0可编程管道 OpenGL负责把三维空间中的对象通过投影.光栅化转换为二维图像,然后呈现到屏幕上. 上图黄色部分(Vertex Shader和Fragment Shader)为此管道的可编程部分.整个管道包含以下两个规范: 1) OpenGL ES 2.0 API specification 2) OpenGL ES Shading Language Specification (OpenGL ES SL) 详细流程图如下: 此流程把三维数据变换为可以显示的二维数据

OpenGL ES总结(一)OpenGL 初识

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/61615215 OpenGL是在图形图像中,非常优秀的渲染库,文中Demo下载地址:https://github.com/hejunlin2013/OpenGL31,看下今天的Agenda: OpenGL是什么? OpenGL主要功能是什么? OpenGL ES是什么? Android中如何描述OpenGL ES版本 映射坐标绘制对

OpenGL ES for Android 环境搭建

在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. OpenGL ES1.0是基于OpenGL 1.3的,OpenGL ES1.1是基于OpenGL 1.5的.Android1.0和更高的版本支持这个API规范.OpenGL ES 1.x是针对固定硬件管线的. OpenGL ES2.0是基于OpenGL 2.0的,不兼容OpenGL ES 1.x.An

OpenGL ES 简单教程

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. OpenGL ES 定义了一个在移动平台上可以支持OpenGL最基本功能的精简标准.以适应如手机.PDA或其他消费者移动终端的显示系统. Khronos Group 定义和管理了OpenGL ES标准. OpenGL 与 OpenGL ES的关系OpenGL ES 是基于桌面版本号OpenGL 的

3D OpenGL ES

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本OpenGL 的一个子集. OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工的工序是固定的,但是可以通过打开或关闭开关来设置参数或者打开关闭某些功能.OpenGL ES 2.0 允许提供编程来控制

Android OpenGL ES绘图教程之二 : 定义形状

在OpenGL ES view中可以定义要绘制图形的形状,是你创建高端图形杰作的第一步.在不知道一些基础的情况下来绘制会有点棘手,比如OpenGL ES是如何定义图形对象的. 本教程解释了OpenGL ES坐标系统与Android设备屏幕的关系,如果定义基础的形状,比如三角形和四边形. 1. 定义一个三角形 OpenGL ES允许你在三维坐标系统中定义绘制对象,所以在绘制三角形之前,必须定义它的坐标.在OpenGL里面,定义坐标的典型方式是定义一个浮点型的顶点坐标数组,为了最大化效率,将这些坐标

[转] iOS OpenGL ES Guide

OpenGL ES 小结 概述 OpenGL ES (Open Graphics Library for Embedded Systems)是访问类似 iPhone 和 iPad 的现代嵌入式系统的 2D 和 3D 图形加速硬件的标准. 把程序提供的几何数据转换为屏幕上的图像的过程叫做渲染. GPU 控制的缓存是高效渲染的关键.容纳几何数据的缓存定义了要渲染的点.线段和三角形. OpenGL ES 3D 的默认坐标系.顶点和矢量为几何数据的描述提供了数学基础. 渲染的结果通常保存在帧缓存中.有两