OpenGL2.0 和 OpenGL3.0 的不同与共同点
来源:互联网 发布:7z解压软件for mac 编辑:程序博客网 时间:2024/05/18 19:40
OpenGL2.0 和 OpenGL3.0 的不同与共同点
在OpenGL2.0中vertex shader中 可以不指定 version 如果不指定 version 对于iOS来说 默认认为是OpenGL2.0 OpenGL2.0中不能使用 in out inout 关键字 , in out inout 关键字 是OpenGL3.0中的关键字
但是对于要使用
在OpenGL3.0中fragment shader中的vec4必须要指定 精度否则就会报错
报的错误为:ERROR: 0:8: 'vec4' : declaration must include a precision qualifier for type
iOS 和 android中
shader中使用
#version 300 es 指定使用OpenGL3.0
#version 100 es 指定使用OpenGL2.0 (不指定version 默认为OpenGL2.0)
如果shader文件没有声明版本,则会认为它使用的是OpenGL ES 2.0的shader版本1.0。为了使版本号相匹配,OpenGL ES 3.0的shader版本直接从1.0跳到了3.0。
GLSL ES 3.0删除gl_FragData和gl_FragColor内置片段输出变量。而是使用out限定符声明自己的片段输出变量。
顶点缓冲区对象VBO与顶点数组对象VAO
VBO可以将顶点数据保存在显存中,绘制时直接从显存中取数据,减少了数据传输的开销。
通过VBO我们可以将顶点属性数据保存在显存中,当绘制时问题又来了,需要调用好几个函数,过程挺复杂的。为了解决这个问题,OpenGL又引入了VAO(Vertex Array Object)来关联VBO中的数据(VAO详解),有了VAO,任何数组形式的GL函数调用都会添加到VAO的绘制列表当中(直到解除VAO绑定),当需要绘制的时候,我们仅需要重新绑定VAO,那么之前创建的绘制列表将会重新激活,使得绘制代码更加简洁。
glDrawArrays
glDrawElements
默认精度修饰符 precision 解释
默认精度修饰符
precision precision-qualifier type;
precision可以用来确定默认精度修饰符。type可以是int或float或采样器类型,precision-qualifier可以是lowp, mediump, 或者highp。任何其他类型和修饰符都会引起错误。如果type是float类型,那么该精度(precision-qualifier)将适用于所有无精度修饰符的浮点数声明(标量,向量,矩阵)。如果type是int类型,那么该精度(precision-qualifier)将适用于所有无精度修饰符的整型数声明(标量,向量)。包括全局变量声明,函数返回值声明,函数参数声明,和本地变量声明等。没有声明精度修饰符的变量将使用和它最近的precision语句中的精度。
在顶点语言中有如下预定义的全局默认精度语句:
precision highp float;
precision highp int;
precision lowp sampler2D;
precision lowp samplerCube;
在片元语言中有如下预定义的全局默认精度语句:
precision mediump int;
precision lowp sampler2D;
precision lowp samplerCube;
片元语言没有默认的浮点数精度修饰符。因此,对于浮点数,浮点数向量和矩阵变量声明,要么声明必须包含一个精度修饰符,要不默认的精度修饰符在之前已经被声明过了。
修饰顺序
当需要使用多个修饰时,它们必须遵循严格的顺序:
(1)invariant-qualifier storage-qualifier precision-qualifier
(2)storage-qualifier parameter-qualifier precision-qualifier
参考内容:
http://www.xuebuyuan.com/1980605.html
- OpenGL2.0 和 OpenGL3.0 的不同与共同点
- OpenGL2.0着色器的封装
- Parameters 和 Data 的共同点与不同点
- case 和decode 的区别与共同点
- openGl2.0 3D
- OpenGL3.0教程
- %和&运算的共同点。
- 如何写一个单纯的OpenGL2.0程序
- list、vector和deque容器的区别与共同点
- 纹理对象和采样器对象->CUDA3.0&OpenGL3.3
- OpenGL3.0教程 第六课:键盘和鼠标
- OpenGL3.0 vs2012 环境搭建
- OpenGL3.0常用函数详解
- 数列和的一些共同点
- OpenGL ES1.1与OpenGL2.0函数集合,固定管线与可编程管线
- OpenGL2.0同OpenGLES2.0差异
- Genymotion video card not rupport OpenGL2.0
- Opengl2.0 + MS3D实现骨骼动画
- FP-growth算法发现频繁项集(一)——构建FP树
- Python 中 变量的 is 和 == 符号的作用
- codeforces 603E(LCT+优先队列)
- 链表的常见操作入门(一)
- Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
- OpenGL2.0 和 OpenGL3.0 的不同与共同点
- JSP知识点汇总(一)
- 负载均衡
- zookeeper注册服务信息---获取IP地址及空闲端口(nodejs typescrip)
- 使用AppBarLayout+CollapsingToolbarLayout实现自定义工具栏折叠效果
- 对抗自编码
- 简单快速了解Vue.js的开发流程
- 优化mysql查询的方法
- 第一周、课时12:js三个循环之for循环