第二节 最简单的OpenGL ES

直接利用GLSurfaceView、Render来写一个最简单的demo
MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rl_surface=findViewById(R.id.rl_surface);
        HRender render=new HRender();
        rl_surface.setRenderer(render);

    }

HRender.java

package com.example.huozhenpeng.openglsecond;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

/**
 * 作者 huozhenpeng
 * 日期 2018/9/19
 * 邮箱 [email protected]
 */

public class HRender implements GLSurfaceView.Renderer {

    public HRender()
    {

    }
    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {

        //X,Y 以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。
        //width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口
        GLES20.glViewport(0,0,width,height);

    }

    @Override
    public void onDrawFrame(GL10 gl) {
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
        //设置清屏颜色为蓝色
        GLES20.glClearColor(0f,0f,1f,1f);

    }
}

布局:


运行效果:


image.png

        rl_surface.setRenderer(render);
        rl_surface.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
        rl_surface.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);

rl_surface在设置render后可以指定render的mode,有两种模式可以供选择

RENDERMODE_WHEN_DIRTY
阻塞式的


image.png

RENDERMODE_CONTINUOUSLY


image.png

onDrawFrame会一直调用

你可能感兴趣的:(第二节 最简单的OpenGL ES)