必威体育Betway必威体育官网
当前位置:首页 > IT技术

OpenGL2.0 和 OpenGL3.0 的不同与共同点

时间:2019-10-04 17:14:28来源:IT技术作者:seo实验室小编阅读:88次「手机版」
 

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_FragDatagl_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

相关阅读

【OpenGL ES】EGL简介

【参考-khronos-egl(最新版本1.5)】https://www.khronos.org/egl 【参考-khronos-egl-api(目前共34个API,不包括Khronos扩展)】https:/

通俗易懂的 OpenGL ES 3.0(一)入门必备知识!!

前言 opengl的入门是个难点,因为在绘制出图形之前,你必须要学习一大堆的概念,以及部分图形知识。以至于在代码中不迷路-v-!!.接下

OpenGL开发学习指南二(glfw+glad)

在上一篇文章中博主介绍了freeglut+glew的环境配置,本文介绍glfw+glad的环境配置本系列教程将使用本文的opengl开发库开发工具 VS2

从零开始之OpenGL ES 2.0【0】

刚刚接触OpenGL ES一头雾水,完全不知道从什么地方入手。本文的OpenGL ES 为 OpenGL ES2.0,为什么要从2.0开始学习呢,因为后续的

opengl入门记录--glPushMatrix和glPopMatrix原理

glPushMatrix、glPopMatrix操作事实上就相当于栈里的入栈和出栈。很多人不明确的可能是入的是什么,出的又是什么。比如你当前的坐

分享到:

栏目导航

推荐阅读

热门阅读