iOS学习笔记程序员

OpenGL ES 3.0入门之顶点着色器和程序介绍

2018-08-16  本文已影响14人  半城coding

原文地址: https://lm1024.xyz/archives/108

着色器

本文主要介绍顶点着色器和片段着色器在脚本执行过程是怎样被执行的。一般着色器包括两种(顶点着色器和片段着色器)每一个着色器从在程序运行的过程中都会经历 创建 -->加载 --> 编译 --> 创建着色程序--->将编译好的着色器连接到着色程序上---> 链接程序对象 --> 使用 的过程

image

统一变量和属性

统一变量——是存储应用程序通过OpenGL ES 3.0 API 传递给着色器的只读常数值的变量
1、命名统一变量块
概念:统一变量的值由统一变量缓冲区支持,会分配一个统一变量块索引
示例:


image

2、默认统一变量块
概念:在命名统一变量块之外的统一变量
示例:


image

3、 获取和设置统一变量
查询程序中活动统一变量的列表流程:

GLint maxUniformLen;
GLint numUniforms;
char * uniformName;
GLint indenx;

glGetProgramiv (progObj, GL_ACTIVE_UNIFORMS, &numUniforms);
glGetProgramiv (progObj, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformLen);

uniformName = malloc ( sizeof(char) * maxUniformLen);

for (index = 0; index < numUniforms; index++)
{
    GLint size;
    GLenum type;
    GLint locationl

    glGetActiveUniform (progObj, index, maxUniformLen, NULL, &size, &type, uniformName);

    location = glGetUniformLocation (progObj, uniformName);

    switch (type)
    {
        case GL_FLOAT:
            break;
        case GL_FLOAT_VEC2:
            break;
        default:
            break;
     }
}

4、统一对象缓冲区
定义:
使用缓冲区对象存储统一变量数据,从而在程序中的着色器之间甚至程序之间共享统一变量,这种缓冲区对象称作统一缓冲区对象
作用:
可以更新打的统一变量时降低API开销,增加统一变量的可用存储
统一变量在内存中的形式:

5、 std140布局

着色器编译器

当我们执行『shader创建编译过程』后可以调用glReleaseShaderCompiler释放掉着色器所占用的系统资源

程序二进制码

思考: 我们在执行了『shader创建编译过程后』能不能将我们编译好的着色程序保存程文件?
答案: 答案是可以的,程序二进制码是完全变一盒链接的程序的二进制表现形式。它们很有用,可以保存到文件系统供以后使用,conger避免在线编译的代价。也可以直接使用编译好的程序二进制码,这样没有必要在实现中分发这着色器源代码

流程:

写在最后

都是概念真的不知道写点什么,把作者的总结贴上来吧

在本章节中,我们介绍了创建、编译和链接着色器到程序的方法。着色对象和程序对象组成了OpenGL ES 3.0中的基本对象。我们讨论了如何查找程序对象的信息以及加载统一变量的方法。此外,还学习了着色器源代码和程序二进制码的差别以及各自的使用方法。

上一篇 下一篇

猜你喜欢

热点阅读