美文网首页
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