这里介绍OpenGL数据从Java代码如何一步一步渲染至屏幕
由于Java运行在JVM中,所以在准备传递大块数据时(即C接口使用指针时),需要用到Buffer类。
代码示例
val colorAry = floatArrayOf(
1f, 0f, 0f, 1f,
0f, 1f, 0f, 1f,
0f, 0f, 1f, 1f)
color = ByteBuffer
.allocateDirect(colorAry.size * 4)
.order(ByteOrder.nativeOrder())
.asFloatBuffer()
.put(colorAry)
.position(0)
uniform数据用于传递绘制期间的‘常量’,例如变换矩阵、光源、全局偏移、贴图等等。
attribute数据用于传递顶点数据,例如顶点坐标、顶点颜色、法线向量、贴图坐标等等。
varying数据用于在顶点着色器与片段着色器间传递数据,与上两种数据不同,varying类型数据不能由着色器之外传入。
举个例子
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3)
如果我们顶点数据准备了足够三个顶点的数据的话,上访的操作将会调用三次顶点着色器,并利用顶点着色器生成的顶点最终坐标(gl_Position)生成一个屏幕上的三角形,并对屏幕上三角形内的每一个像素调用片段着色器,使用gl_FragColor的值输出到屏幕上。