美文网首页
OpenGL ES 着色器

OpenGL ES 着色器

作者: Lucky胡 | 来源:发表于2019-11-27 14:25 被阅读0次

    GLSL

    着色器使用GLSL语言写的。

    着色器以声明版本号开头,然后是输入、输出变量,uniform变量和main函数。

    每个着色器都是以main函数为入口。

    数据类型

    int float double bool uint

    向量vec和矩阵Matrix

    向量也有很多种,
    vecn 包含n个float分量的默认向量
    bvecn 包含n个bool分量的向量
    ivecn 包含n个int分量的向量
    uvecn 包含n个unsigned int分量的向量
    dvecn 包含n个double分量的向量

    向量重组

    vec2 someVec;
    vec4 differentVec = someVec.xyxx;
    vec3 anotherVec = differentVec.zyw;
    vec4 otherVec = someVec.xxxx + anotherVec.yxzy;
    

    输入与输出

    每个着色器都有输入和输出,这样才能进行数据交流和传递。GLSL定义了in和out关键字专门来实现这个目的。

    顶点着色器应该接收的是一种特殊形式的输入,否则就会效率低下。顶点着色器的输入特殊在,它从顶点数据中直接接收输入。

    为了定义顶点数据该如何管理,我们使用location这一元数据指定输入变量,这样我们才可以在CPU上配置顶点属性。我们已经在前面的教程看过这个了,layout (location = 0)。顶点着色器需要为它的输入提供一个额外的layout标识,这样我们才能把它链接到顶点数据。

    你也可以忽略layout (location = 0)标识符,通过在OpenGL代码中使用glGetAttribLocation查询属性位置值(Location),但是我更喜欢在着色器中设置它们,这样会更容易理解而且节省你(和OpenGL)的工作量。

    Uniform

    Uniform是一种从CPU中的应用向GPU中的着色器发送数据的方式。

    uniform vec4 ourColor; // 在OpenGL程序代码中设定这个变量
    

    在程序中更改unifom值

        //查找uniform变量的位置
        GLint colorLocation = glGetUniformLocation(mProgram, "ourColor");
        //更新该uniform变量的值
        glUniform4f(colorLocation, 0, green, 0, 1);
    

    相关文章

      网友评论

          本文标题:OpenGL ES 着色器

          本文链接:https://www.haomeiwen.com/subject/onspwctx.html