清楚了的
- GL10:意味着可以使用OpenGL ES 1.0标准中定义的所有函数。
需要再次学习的
问题一
public class TriangleRenderer implements GLSurfaceView.Renderer {
private GLSurfaceView glSurfaceView;
public TriangleRenderer(GLSurfaceView glSurfaceView) {
this.glSurfaceView = glSurfaceView;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// this.firstTriangle(gl);
// this.secondTriangle(gl);
//当前存在的问题就是画出来的内容一直闪烁是什么鬼,就先这样吧,先看看纹理。
LogUtil.i("onSurfaceCreated");
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
LogUtil.i("onSurfaceChanged");
}
@Override
public void onDrawFrame(GL10 gl) {
this.secondTriangle(gl);
//后来我试了一下放到这个方法里就不会闪烁啦,所以我们是没有搞清楚,复写的这三个方法的细节咯。
}
private void secondTriangle(GL10 gl) {
final int vertexSize = (2 + 4) * 4;
gl.glClearColor(0, 0, 0, 1);//设置背景的缓冲区颜色。
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//用缓冲区中的颜色来清理试图内容。
gl.glViewport(0, 0, this.glSurfaceView.getWidth(), this.glSurfaceView.getHeight());//定义视口
gl.glMatrixMode(GL10.GL_PROJECTION);//设置据怎类型为投影矩阵。
gl.glLoadIdentity();//重置当前指定的矩阵为单位矩阵.
//gl.glOrthof(0,320,1,0,480,-1);
gl.glOrthof(0, 320, 0, 480, 1, -1);
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(3 * vertexSize);//三个定点,每个由xy组成,每个浮点数占4个字节(只能使用XY表示定点坐标z轴默认为0)
byteBuffer.order(ByteOrder.nativeOrder());
FloatBuffer floatBuffer = byteBuffer.asFloatBuffer();
float[] array = {
/*坐标*/10f, 30f,/*颜色*/1, 0, 0, 1,
/*坐标*/310f, 30f,/*颜色*/0, 1, 0, 1,
/*坐标*/150f, 450f,/*颜色*/0, 0, 1, 1
};
floatBuffer.put(array);
floatBuffer.flip();
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
floatBuffer.position(0);
gl.glVertexPointer(2, GL10.GL_FLOAT, vertexSize, floatBuffer);
floatBuffer.position(2);
gl.glColorPointer(4, GL10.GL_FLOAT, vertexSize, floatBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
}
现象:
在public void onSurfaceCreated(GL10 gl, EGLConfig config)
调用 secondTriangle
执行的结果就会持续闪烁
在public void onDrawFrame(GL10 gl)
调用 secondTriangle
执行的结果就没问题