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

2023-11-04

             

有几个学习图形学不久的同学都问到这个问题,做一阐述:
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都会有这样的着色器编程,哈哈,学起来吧。知识量越多的一个图形库,掌握难度越大,功能也越强,开发的产品也就越人性化。



学任何学科其实都是在学习它的历史。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • WebKit 是否使用 OpenGL 来渲染 CSS 过渡?

    WebKit 是使用 OpenGL 来渲染 CSS 过渡 还是使用软件渲染 WebKit 只是一个前端 这取决于后端和硬件支持 谷歌浏览器使用skia http code google com p skia 作为后端 它可以使用软件或硬件
  • OpenGL 与 Eclipse CDT + MinGW + GLEW + GLFW:未定义的参考

    Edit 与此同时 我已经弄清楚了这一点 并在下面写了详细的答案 我刚刚尝试在 Win7 上从 Express 版本的 MSVC 10 切换到 Eclipse CDT 在配置时遇到了以下简单 OpenGL 代码的问题 在 Visual St
  • Swift:转义闭包捕获非转义参数“onCompletion”

    我的 swift 有问题 我正在尝试发送 API 请求 然后检索数据 但收到以下错误消息 Swift 转义闭包捕获非转义参数 onCompletion 有谁知道我该如何解决这个问题 提前致谢 Code class RestApiManage
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • 删除 Google Maps API Premier 使用条款/徽标/等。链接?

    删除我的集成谷歌地图 谷歌地图总理 上显示的徽标 使用条款链接是否合法 问题是 当我放大地图时 链接往往会变得更长并记录并覆盖整个网站 这非常难看 当然可以给div容器一个 overflow hidden 标志有一点帮助 但仍不令人满意 T
  • 如何从网站中提取冠状病毒病例?

    我正在尝试从网站中提取冠状病毒 https www trackcorona live https www trackcorona live 但我得到了一个错误 这是我的代码 response requests get https www t
  • Web Api - 不允许捕获 405 方法

    截至目前 Web api 应用程序针对 405 方法不允许错误返回以下响应正文 我正在尝试更改响应正文 但我不知道如何使用委托处理程序 ApiControllerActionSelector 或过滤器 谁能帮我捕获服务器端的 405 错误
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • XML-RPC 与 REST

    我打算在这里构建一个小型服务器 并想为其创建一个 API 我正在决定什么是更好的并且已经排除了SOAP因为在我看来那件事是一团糟 我只剩下REST and XML RPC 我真的很喜欢XML RPC 它实现起来非常简单 并且足够常规 所有客
  • 我应该如何格式化 .dat 文件以便制作 3D 矢量图?

    我正在为大学做这个编程任务 我们必须写一个c 计算 3D 空间中某些线圈的磁场矢量的程序 我已经成功编写了这个程序 并且我认为它运行得很好 不过 我想添加一个特殊的东西 这是我的试卷 所以它必须特别好 我想绘制出向量 我习惯打电话gnupl
  • 使用 PRAW 帮助获取 Reddit 帖子链接到的 URL

    我正在尝试使用 Praw 获取 Reddit 提交标题中链接的帖子 例如提交 http www reddit com r AdviceAnimals comments 1adu71 apparently people still need
  • 使用 Scipy/Numpy 在浊点的二维插值中仅获取“有效”点

    我有一个通过人的背部摄影测量获得的浊点 我正在尝试对其进行插值以获得规则网格 为此我正在使用scipy interpolate到目前为止取得了良好的成果 问题是 我正在使用的函数 scipy interpolate griddata 使用平
  • 在 GLUT 中使用鼠标滚轮

    我想在 OpenGL GLUT 程序中使用鼠标滚轮来放大和缩小场景 我怎么做 Freeglut 的 glutMouseWheelFunc 回调与版本相关 并且在 X 中不可靠 使用标准鼠标功能并测试按钮 3 和 4 OpenGlut 对 g
  • Google Sheets API v4 和 valueInputOption

    我的电子表格中有三列 第一个是日期 第二个和第三个是简单字符串 当我批量上传数据时valueInputOption RAW 我的日期列得到错误的结果 所有日期前面都有一个看不见的撇号 字符串列没问题 当我使用valueInputOption
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 寻找Android源代码

    Android API 是开源的吗 如果是这样 我想看看他们如何实现 ListView 对象的 smoothscroll 方法 这是在 API 级别 8 中实现的 但我想针对早期的 API 级别进行构建 我该如何找到这个 是的 它是开源的
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 在球体边缘绘制点

    因此 来自 Flash 背景的我对一些简单的 2D 三角函数有很好的理解 在带有 I 圆的二维中 我知道使用给定角度和半径将项目放置在边缘上的数学 x cos a r y sin a r 现在 如果我在 3d 空间中有一个点 我知道球体的半
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • 如何为 ApplicationController 中 after_action 过滤器中的所有操作渲染 json?

    是否可以在 Rails ApplicationController 中创建一个 after filter 方法 该方法在每个操作上运行并呈现为 JSON 我正在构建一个 API 并且希望将控制器中的每个操作的输出呈现为 JSON 客户控制器

随机推荐

  • 2字节16进制转化为1字节10进制

    res USART2 BT BUF 4 lt lt 8 USART2 BT BUF 3 USART2 BT BUF 3 为高八位 USART2 BT BUF 4 为底八位
  • Springboot 使用MinIO (附源码 demo)

    一 MinIO是什么 MinIO 是在 GNU Affero 通用公共许可证 v3 0 下发布的高性能对象存储 它与 Amazon S3 云存储服务 API 兼容 使用 MinIO 为机器学习 分析和应用程序数据工作负载构建高性能基础架构
  • yii2 html编辑器,Yii2学习笔记十八:Ueditor百度编辑器(转载)

    安装方法 1 下载扩展下载 2 将下载的yii2 ueditor master 修改 ueditor 注意 修改成其他文件名请修改插件内对应的命名空间 3 将文件方在 根目录 common widgets 下即可 调用方法 在rootPat
  • 物联网LoRa系列-16:LoRa终端Sx1262芯片外部的射频前端电路设计

    前言 在 全面拆解和构建5G物联网 15 图解 详解无线终端的天线对无线电磁波的发送与接收 中 我们详细阐述了LoRa终端的天线本身是如何发送和接收高频无线电磁波信号的 本文将借助和结合LoRa射频芯片Sx1262的射频前端电路设计 进一步
  • 数据进制的转换

    其他进制转换为十进制 通过按权展开法转换 十进制转换为其他进制 通过短除法转换 注意计算结果是倒着的 例如将十进制的94转换为二进制 二进制转八进制和十六进制 3位二进制数表示1位八进制数 4位二进制数表示1位十六进制数 同理八进制数和十六
  • SystemMiner挖矿病毒处理记录

    病毒相关信息 示例 病毒家族 SystemdMiner 病毒痕迹 内网大量爆破22端 访问矿池 CPU占用100 1 3 矿池信息 99 90 243 136 1 4 挖矿进程 挖矿主进程为随机的8位数字与字母的组合 示例如下所示 该进程由
  • 用循环语句while或for循环编写一个验证登陆的小程序

    要求 当用户名与密码全部正确时提示登陆成功 否则 提示登陆失败 三次验证失败退出系统 while循环 代码如下 import java util Scanner author Administrator public class Text6
  • Springboot中使用ModelMapper对outputdto转entity的坑

    今天在使用ModelMapper对outputdto转entity的时候发现转出来的entity是null的 在用inputdto转entity的时候没出现过这样的问题呢 对比了下inputdto和outputdto并没有什么不一样 可以说
  • 常用的ASCII码值

    常用的ASCII码值 1 什么是ASCII码 ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符 标准ASCII 码也叫基础ASCII码 使用7 位二进制数 剩下的1位二进制为0 来表示所有的大写和小写字
  • 目标检测小白入门(一)——背景、指标、数据集

    一 背景介绍 计算机视觉领域有四大主要任务 分别是图像分类 目标检测 目标跟踪 图像分割 图像分类的目标是将给定的图像进行分类 给图片或视频分配一个类别标签 比如图像中大部分都是气球 还有其他物体 要给这个图片或者视频提供气球的标签 目标检
  • C语言实现GB2312和UTF8之间的编码转换

    C语言实现GB2312和UTF8之间的编码转换 GB2312 GB2312编码适用于汉字处理 汉字通信等系统之间的信息交换 基本集共收入汉字6763个和非汉字图形字符682个 GB2312中对所收汉字进行了 分区 处理 字符集分成94个区
  • CocosCreator3.8研究笔记(十五)CocosCreator 资源管理Asset Bundle

    在资源管理模块中有一个很重要的功能 Asset Bundle 那什么是Asset Bundle 有什么作用 怎么使用 Asset Bundle呢 一 什么是Asset Bundle 有什么作用 在日常游戏开发过程中 为了减少游戏启动时 资源
  • 2020年必学的devops流行工具,你学会了吗?

    2020年必学的devops流行工具 1 Git 2 Docker 3 Selenium 4 Jenkins 5 Ansible 6 puppet 7 Nagios 8 Chef DevOps Development和Operations的
  • 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一 引言 在 第14 10节 Python中使用BeautifulSoup解析http报文 html标签相关属性的访问 和 第14 11节 Python中使用BeautifulSoup解析http报文 使用查找方法快速定位内容 介绍了通过属
  • Python实现文本词频统计算法及完整代码

    Python实现文本词频统计算法及完整代码 Python是一种高级编程语言 广泛应用于数据科学 机器学习等领域 在文本处理方面 Python也有着得天独厚的优势 不仅提供了多种字符串操作函数 而且还可以使用各种开源库来处理文本 本文将介绍一
  • hdu 1043/poj 1077八数码问题 BFS+康托展开求解

    hdu poj include
  • JedisCommands

    import java util List import java util Map import java util Set Common interface for sharded and non sharded Jedis publi
  • 10天学会flutter DAY6 flutter 玩转异步加载

    玩转异步加载 异步支持 1 处理 Future 2 声明异步函数 3 async await 4 处理 Stream 5 isolate机制 6 生成器 7 元数据 异步支持 Dart 代码库中有大量返回 Future 或 Stream 对
  • 用 Pyqt5 制作一个动态水波进度条

    最近做了一个小项目 里面有一个需求需要添加一个动态进度条 进度条的样式就类似于水波来回起伏的那种形状 下面就是最初的展示效果 有一点区别 这里我加了一个进度自动增加的功能 end imag11252323 gif 下面先说一下这个效果的制作
  • OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out

    有几个学习图形学不久的同学都问到这个问题 做一阐述 1 关键字的小修改大概由如下两点决定 第一 先考虑一个成本原则 一个关键字的定义是否修改 是由熟练程序员在使用该关键字时的思维成本来决定的 当然 还有一个原则 是由初学者的学习成本来决定的