OpenGL ES 3.0 | 着色器编译器

概述

  • 当你要求OpenGL ES 编译链接着色器时,
    思考 OpenGL ES 实现 必须要做的事情;

  • 着色器代码 通常解析为 某种中间表现形式
    这和大部分编译语言相同(例如,抽象语法树);

  • 编译器必须将 抽象表现形式 转化为 硬件的机器指令
    理想状态下,
    这个 编译器 还应该进行大量的优化
    例如 无用代码删除、常量传播等;
    进行这些工作需要付出代价——主要是CPU时间内存

  • OpenGL ES 3.0 实现
    必须支持在线着色器编译(用glGetBooleanv检索GL_SHADER_COMPILER值必须是GL_TRUE);

  • 可以指定着色器使用glShaderSource

  • 可以尝试缓解着色器编译对资源的影响;
    一旦完成了应用程序中着色器的编译,
    就可以调用void glReleaseShaderCompiler(void)
    这个函数提示 OpenGL ES,我们已经完成了着色器编译器的工作,
    可以释放它的资源了;

    不过注意,
    这个函数只是一个提示,
    如果决定用glCompileShader编译更多着色器
    那么OpenGL ES需要重新为编译器分配资源


程序二进制码

  • 程序二进制码完全 编译和链接的 程序二进制表现形式
  • 可以保存到文件系统供以后使用,避免在线编译的代价;
  • 如果使用程序二进制码,就不用在实现中分发着色器源代码
  • 可以在成功地 编译和链接程序 之后
    使用glGetProgramBinary检索程序二进制代码

  • 检索了程序二进制代码之后,
    可以用glProgramBinary将其保存到文件系统
    或者将程序二进制代码读回OpenGL ES实现:


程序二进制码的兼容问题处理
  • OpenGL ES 规范不强制使用任何特定的二进制格式
    相反,
    二进制格式完全取决于供应商
    即程序的可移植性比较
    但是意味着 供应商可以创建较不笨重的OpenGL ES 3.0实现

  • 实际上,
    二进制格式同一供应商不同驱动程序版本中实现可能出现变化
    为了确保是存储的程序二进制代码仍然兼容
    在调用glProgramBinary之后,
    可以通过glGetProgramiv查询GL_LINK_STATUS
    如果二进制码不再兼容
    则须重新编译着色器源代码。











参考自:

  • 《OPENGL ES 3.0编程指南(第2版)》
由资深OpenGL技术专家亲笔撰写,全面介绍OpenGL ES 3.0的各种特性及新增功能,通过大量已经编译和测试过的实例,详细讲解OpenGL ES 3.0中的应用程序接口(API)和图形管线,既涵盖简单图形的渲染方法,又深入介绍逐像素照明和粒子系统等高级渲染技术,并且包含大量有效使用API和硬件的实用技巧,为手持设备的各种高性能3D应用开发提供翔实指导。 《华章 OpenGL ES 3.0编程指南(原书第2版)》共16章:第1章简单介绍OpenGL ES ,并概述OpenGL ES 3.0图形管线;第2章通过绘制一个三角形的简单OpenGL ES 3.0示例程序,讲解一些API概念,并说明如何构建和运行OpenGL ES示例程序;第3章讲述为OpenGL ES 3.0创建表面和渲染上下文的API——EGL;第4章讨论创建着色器对象、编译着色器和检查编译错误的方法;第5章讲解编写着色器所需的着色语言基本知识;第6章详细介绍几何形状输入图形管线的方法,包含对顶点属性、顶点数组和缓冲区对象的讨论;第7章讨论几何形状如何装配成图元,介绍OpenGL ES 3.0中所有可用图元类型,包括点精灵、直线、三角形、三角形条带和三角扇形;第8章概述顶点着色器如何融入管线,以及OpenGL ES 着色语言中可用于顶点着色器的特殊变量;第9章和第10章介绍片段着色器,包括多重纹理、雾化、Alpha测试和用户裁剪平面等;第11章讨论片段操作,包括剪裁测试、模板测试、深度测试、多重采样、混合和抖动;第12章介绍使用帧缓冲区对象渲染屏幕外表面;第13章讨论同步对象和栅栏的使用方法;第14章介绍OpenGL ES 3.0高级编程,包含使用法线贴图的逐像素照明、环境贴图、粒子系统、图像后处理、程序纹理、阴影贴图、地形渲染和投影纹理等渲染技术。;第15章提供OpenGL ES 3.0中各种可用状态查询的参考;第16章讨论如何为iOS 7、Android 4.3 NDK、Android 4.3 SDK、Windows和Linux构建OpenGL ES样板代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌川江雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值