直接利用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
* 邮箱 huohacker@sina.com
*/
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);
}
}
布局:
<android.opengl.GLSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rl_surface"
/>
运行效果:
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
阻塞式的
RENDERMODE_CONTINUOUSLY
onDrawFrame会一直调用