直接利用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 以像素為單位,指定了視口的左下角(在第一象限內(nèi)促王,以(0难捌,0)為原點的)位置殴边。
//width厉斟,height 表示這個視口矩形的寬度和高度,根據(jù)窗口的實時變化重繪窗口
GLES20.glViewport(0,0,width,height);
}
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
//設(shè)置清屏顏色為藍色
GLES20.glClearColor(0f,0f,1f,1f);
}
}
布局:
<android.opengl.GLSurfaceView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rl_surface"
/>
運行效果:
image.png
rl_surface.setRenderer(render);
rl_surface.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
rl_surface.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
rl_surface在設(shè)置render后可以指定render的mode乳规,有兩種模式可以供選擇
RENDERMODE_WHEN_DIRTY
阻塞式的
image.png
RENDERMODE_CONTINUOUSLY
image.png
onDrawFrame會一直調(diào)用