OpenGL 系列文章目录
文章目录
OpenGL 系列文章目录
一、着色器
顶点着色器
片段着色器
二、设置顶点数据
三、代码
一、着色器
顶点着色器
#version 300 es 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的位置。
片段着色器
#version 300 es 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