OpenGL 系列文章目录
文章目录
本系列文章用于记录OpenGL的学习过程
顶点着色器
precision mediump float;
layout(location = 0) in vec4 a_position;
layout(location = 1) in vec2 a_textureCoordinate;
out vec2 v_textureCoordinate;
void main() {
v_textureCoordinate = a_textureCoordinate;
gl_Position = a_position;
}
vec4 a_position
: 用于接收kotlin端传入的顶点位置
vec2 a_textureCoordinate
:接收kotlin端传入的纹理的顶点位置
v_textureCoordinate
:将传入的纹理顶点位置输出给片段着色器
直接指定a_position
的location
为0,这样可以操作location0
来操作a_position
,不需要像2.0那样先获取a_position
的位置。
片段着色器
precision mediump float;
precision mediump sampler2D;
layout(location = 0) out vec4 fragColor;
layout(location = 0) uniform sampler2D u_texture;
in vec2 v_textureCoordinate;
void main() {
fragColor = texture(u_texture, v_textureCoordinate);
}
in vec2 v_textureCoordinate
:从顶点着色器中接收纹理的顶点位置
out vec4 fragColor
:定义输出颜色变量
u_texture
:传入的纹理数据
将内置的gl_FragColor
改写为输出变量。
由于GL画三角形是最高效的,因此使用两个三角形拼成矩形
private val vertexData = floatArrayOf(-1f,-1f,
-1f,1f,
1f,1f,
-1f,-1f,
1f,1f,
1f,-1f)
激活位置0顶点的顶点数据
GLES30.glEnableVertexAttribArray(0)
第一个参数为postion
,第二个参数指定部件个数为2,即三角形的个数
GLES30.glVertexAttribPointer(0, 2, GLES30.GL_FLOAT, false,0, vertexDataBuffer)
三、代码
本文使用示例代码中的ShaderFragment