opengl2.0
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
相关阅读
【参考-khronos-egl(最新版本1.5)】https://www.khronos.org/egl 【参考-khronos-egl-api(目前共34个API,不包括Khronos扩展)】https:/
通俗易懂的 OpenGL ES 3.0(一)入门必备知识!!
前言 opengl的入门是个难点,因为在绘制出图形之前,你必须要学习一大堆的概念,以及部分图形知识。以至于在代码中不迷路-v-!!.接下
在上一篇文章中博主介绍了freeglut+glew的环境配置,本文介绍glfw+glad的环境配置本系列教程将使用本文的opengl开发库开发工具 VS2
刚刚接触OpenGL ES一头雾水,完全不知道从什么地方入手。本文的OpenGL ES 为 OpenGL ES2.0,为什么要从2.0开始学习呢,因为后续的
opengl入门记录--glPushMatrix和glPopMatrix原理
glPushMatrix、glPopMatrix操作事实上就相当于栈里的入栈和出栈。很多人不明确的可能是入的是什么,出的又是什么。比如你当前的坐