OpenGLES系列demo之框架简介
在上一篇文章中,简单介绍了openGL ES版的helloworld程序,给出了最简单的使用步骤。在接下来的openGLES系列文章中,主要想通过一些demo由浅入深地记录对openGL ES的学习和总结。而这些系列demo会基于一个基本框架基础来开发,因此本文主要是想先介绍这个基本框架。
openGLES的开发可以完全在java层完成,调用其相关的一些接口和类。当然也可以在native层通过c++实现,更贴近openGLES本身。其实这两种都可以,基本没有性能上的优劣,相差不大。但是为了以后在openGLES的处理基础上,再加入其他音视频相关操作,所以本博主考虑在c++层去实现。因此框架的搭建会涉及到natvie层。
一、基本框架流程图
二、大致流程简介
1、MyGLSurfaceView
简单自定义GLSurfaceView,继承GLSurfaceView。
并在里面调用GLSurfaceView的setRenderer方法。绑定渲染实现。
2、MyGLRender
简单自定义一个 Render,实现GLSurfaceView.Renderer接口。
跟之前的文章不同的是,由于我们要在c++层去做opengles相关操作,所以这里的绘制等回调接口都不直接做事情,而是调用到c++层那边的一些接口。
public class MyGLRender implements GLSurfaceView.Renderer {private static final String TAG = "MyGLRender";private MyNativeRender mNativeRender;private int mSampleType;MyGLRender() {mNativeRender = new MyNativeRender();}@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config) {mNativeRender.native_OnSurfaceCreated();Log.e(TAG, "onSurfaceCreated() called with: GL_VERSION = [" + gl.glGetString(GL10.GL_VERSION) + "]");}@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height) {mNativeRender.native_OnSurfaceChanged(width, height);}@Overridepublic void onDrawFrame(GL10 gl) {mNativeRender.native_OnDrawFrame();}public void init() {mNativeRender.native_Init();}public void unInit() {mNativeRender.native_UnInit();}}
3、MyNativeRender
MyNativeRender只是一个java层到