OpenGL ES 3.0 开发(一)

2023-10-29

什么是 OpenGLES

OpenGLES 全称 OpenGL for Embedded Systems,是三维图形应用程序接口 OpenGL 的子集,本质上是一个跨编程语言、跨平台的编程接口规范,主要应用于嵌入式设备,如手机、平板等。由科纳斯(Khronos)组织定义和推广,科纳斯是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。

OpenGLES 3.0 的特点

OpenGLES 3.0 实际上是 OpenGLES 2.0 的扩展版本,向下兼容 OpenGLES 2.0 ,但不兼容 OpenGLES 1.0

OpenGLES 3.0 主要新特性

纹理

  • sRGB 纹理和帧缓冲区——允许应用程序执行伽马校正渲染。
  • 2D 纹理数组——保存一组 2D 纹理的纹理目标。
  • 3D 纹理。一些 OpenGL ES 2.0 实现通过扩展支持3D纹理,而 OpenGL ES3.0 将此作为强制的功能。
  • 深度纹理和阴影比较——启用存储在纹理中的深度缓冲区。
  • 无缝立方图。在 OpenGL ES 3.0 中,立方图可以进行采样如过滤来使用相邻面的数据并删除接缝处的伪像。
  • 浮点纹理。

着色器

  • 二进制程序文件。在 OpenGL ES 3.0 中,完全链接过的二进制程序文件可以保存为离线二进制格式,运行时不需要链接步骤。这有助于减少应用程序的加载时间。
  • 非方矩阵。支持方阵之外的新矩阵类型,并在 API中 增加了相关的统一调用,以支持这些矩阵的加载。
  • 全整数支持。支持整数(以及无符号整数)标量和向量类型以及全整数操作。
  • 平面/平滑插值程序。OpenGL ES 3.0 中插值程序可以显式声明为平面或者平滑着色。
  • 统一变量块。统一变量值可以组合为统一变量块。统一变量块可以更高效地加载,也可在多个着色器程序间共享。
  • 布局限定符。顶点着色器输入可以用布局限定符声明,以显式绑定着色器源代码中的位置,而不需要调用 API 。

几何形状

  • 变换反馈。可以在缓冲区对象中捕捉顶点着色器的输出。
  • 布尔遮挡查询。应用程序可以查询一个(或者一组)绘制调用的任何像素是否通过深度测试。
  • 实例渲染。有效地渲染包含类似几何形状但是属性(例如变化矩阵、颜色或者大小)不同的对象。

缓冲区对象

  • 统一变量缓冲区对象。为存储/绑定大的统一变量块提供高效的方法。统
  • VAO 顶点数组对象。提供绑定和在顶点数组状态之间切换的高效方法。
  • 采样器对象。将采样器状态(纹理循环模式和过滤)与纹理对象分离。
  • 同步对象。为应用程序提供检查一组操作是否在GPU上完成执行的机制。
  • 像素缓冲对象。使应用程序能够执行对像素操作和纹理传输操作的异步数据传输。
  • 缓冲区对象间拷贝。提供了高效地从一个缓冲区对象向另一个缓冲区对象传输数据的机制,不需要CPU干预。

帧缓冲区

  • 多重渲染目标(MRT)。允许应用程序同时渲染到多个颜色缓冲区。
  • 多重采样渲染缓冲区。使应用程序能够渲染到具备多重采样抗锯齿功能的屏幕外帧缓冲区。
  • 帧缓冲区失效提示。

OpenGLES 3.0 着色器语言规范变化

OpenGLES 3.0 着色器脚本

#version 300 es                          
layout(location = 0) in vec4 vPosition;  
void main()                              
{                                        
  gl_Position = vPosition;              
}

其中,#version 300 es 为 OpenGLES 3.0 版本声明,3.0 中使用 inout 关键字取代 attributevaryinglayout 关键字直接为脚本中的属性指定位置,为属性赋值变成了:

GLfloat vVertices[] = {
            0.0f,  0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f,
            0.5f, -0.5f, 0.0f,
            0.0f,  -1.0f, 0.0f,
            0.5f, -0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f
    };

//第一个参数为对应属性的 location 值
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );

而原来 2.0 的赋值方式为:

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

OpenGL ES 3.0 开发(一) 的相关文章

随机推荐

  • 春眠不觉晓,redis知多少(2)

    春眠不觉晓 redis知多少 第二篇 4 持久化 4 1 原因 4 2 redis持久化机制 4 2 1 RDB 4 2 2 AOF 5 JAVA客户端 Jedis 5 1 介绍 5 2 使用步骤 5 3 Jedis操作各种redis的数据
  • 【毕设记录】Stata稳健性检验~ Robustness

    一些网上看的 自己用的tips汇总 1 DID 平行趋势检验 自己用的 1 在论文呈现上 可以绘制平行趋势图 也可以做一个Table表示平行趋势检验的结果 2 学习文献的做法 创建政策发生前两年的变量 比如政策是Rights 解释变量是A
  • python情感词典_sentimentpy模块进行中文文本情感分类

    sentimentpy是我根据R语言的一个文本情感分析包sentiment进行开发的 开发的初衷有 R的sentiment已经被弃坑 没人维护 Python比R更擅长文本处理 sentiment包不支持中文 而sentimentpy包有如下
  • nginx源码编译安装出现“make[1]: Leaving directory `/usr/local/nginx’“解决办法

    因为我所有的操作步骤都是按照上面来的 我的解决办法也非常的简单 如果你走到make这一步的时候只出现了一行 make 1 Leaving directory usr local nginx 1 12 1 提示 不用管它 继续走make in
  • 五人合伙最佳股份分配_五人合伙股份分配协议书范本

    股份合作企业与合伙企业是当前改制 改组中倍受关注的企业组织形式 那么合伙股份转让协议书又是怎么一回事呢 以下是在小编为大家整理的合伙股份转让协议书范文 感谢您的阅读 合伙股份转让协议书范文1转让方 甲方 身份证号码 住址 受让方 甲方 身份
  • Unity制作摇杆

    1 导入UGUI与Tools资源包 Unity中就会出现两个插件 2 导入人物模型资源包全部导入完之后 3 新建Plane 把人物模型拖到场景中 4 给人物模型制作动画状态机 4 1找到人物模型动画 并将全部的动画类型设置为Genic类型
  • 串行测试 并行测试_什么是并行测试,为什么要采用它?

    串行测试 并行测试 随着技术的进步 随着组织从手动测试转向Selenium测试自动化 测试解决方案变得比以往更具可扩展性 但是 大多数组织仍在努力的领域之一是可并行运行多个测试的可伸缩性 许多公司仍在使用顺序测试方法来提供质量保证 这会浪费
  • 大学生团体天梯赛(第六届)

    题目地址 天梯赛 include
  • 深度学习8

    Generative Adversarial Network 正如我们前面所说的 GAN里面有两个重要的东西 其中一个就是Generator Generator可以是一个NN 它的输入是一个vector 它的输出是一个更高维的vector
  • JSP-javabean技术

  • ELK 4.5——加入机器学习

    如果你也是 Elaticsearch 的粉丝 或者机器学习的爱好者 你肯定不会错过这个东西 5 月份 Elaticsearch 推出了新版本 5 4 准确地说是 Elastic Stack 全家桶都更新为 5 4 了 在 X pack 中的
  • Angular input延迟防抖debounceTime

    import Component OnInit from angular core import AbstractControl FormBuilder FormGroup Validators from angular forms imp
  • 【代码复现】NER之GlobalPointer解析

    前言 在NER任务中 主要分为三类实体 嵌套实体 非嵌套实体 不连续实体 今天分享方法以end to end的方式解决前两个问题 GlbalPointer 它利用全局归一化的思路来进行命名实体识别 NER 可以无差别地识别嵌套实体和非嵌套实
  • Mysql事务---MVCC详解

    Mysql数据库事务隔离级别 SQL 标准定义了四个隔离级别 READ UNCOMMITTED 读取未提交 事务的修改 即使没有提交 对其他事务也都是可见的 事务能够读取未提交的数据 这种情况称为脏读 READ COMMITTED 读取已提
  • Jetpack学习-1-Lifecycle+Activity源码分析

    解耦是软件开发亘古不变的追求 而Lifecycle正是这一名言的体现 Android开发过程中 有些功能不可避免与页面的生命周期关联 LifeCycle作为Jetpack中具有生命周期感知姓的组件 通过感知activity fragment
  • CVE-2022-22963:Spring Cloud Function SpEL 远程代码执行漏洞

    读者需知 本文仅供学习使用 由于传播和利用此文所造成的损失均由使用者本人负责 文章作者不为此承担责任 简介 SpringCloud Function作为SpringCloud家族成员最早在2017年提出 旨在为快速发展的Serverless
  • 以太坊开发文档09 - javascriptApi

    Web3 JavaScript appAPI 为了让您的应用程序能够在以太坊上工作 您可以使用web3 js库web3提供的对象 在底层 它通过RPC调用与本地节点通信 web3 js与任何暴露RPC层的以太坊节点一起工作 web3包含et
  • Vue3 isProxy

    isProxy 检查一个对象是否是由 reactive 或者 readonly 方法创建的代理 实例
  • [计算机毕业设计]深度学习的图标型验证码识别系统

    前言 大四是整个大学期间最忙碌的时光 一边要忙着准备考研 考公 考教资或者实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求的毕设项目越来越难 有不少课题是研究生级别难度的 对本科同学来说是充满挑战 为帮助大
  • OpenGL ES 3.0 开发(一)

    什么是 OpenGLES OpenGLES 全称 OpenGL for Embedded Systems 是三维图形应用程序接口 OpenGL 的子集 本质上是一个跨编程语言 跨平台的编程接口规范 主要应用于嵌入式设备 如手机 平板等 由科