EGL三种修饰符:uniform、attribute、varyi

2020-07-28  本文已影响0人  奉灬孝

3种修饰类型uniformattributevarying

uniform

从外部传递到顶点和片元着色器里面的变量
gluniform..
uniform要传进顶点/片元着色器,就需要在顶点/片元着色器中进行一样的声明
uniform平时可以传视图矩阵、投影矩阵、投影视图矩阵
uniform mat4 viewProMatrix;
然后用gluniform..相对应的api进行传递

attribute

它的特点就是从我们的客户端传递到顶点着色器,只能传递到顶点着色器,片元着色器是不使用attribute属性的。它是用来修饰顶点、纹理坐标、颜色、法线等于坐标颜色有关的属性
glVertex...调用相关api
先打开开关,再设置合适的方式从buffer里面读取数据->将顶点数据copy到顶点缓存区中(GPU显存中)

//顶点坐标数据
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 0);
//纹理坐标数据
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 5, (GLfloat *)NULL + 3);

attribute vec4 position;
attribute vec4 color;
attribute vec2 texCoord;

varying

纹理坐标是无法传递到片元着色器的,就需要传递到顶点着色器,使用varying进行桥接
varying就是把attribute间接的传递到片元着色器使用的修饰符

//这句代码需要在顶点着色器和片元着色器做相同的声明,这样我们的片元着色器就能够拿到纹理坐标的值
varying lowp vec2 varyTextCoord; 
上一篇下一篇

猜你喜欢

热点阅读