初始化GLSurfaceView
接下来我们将尝试使用OpenGLES绘制一个三角形,首先创建一个Android Studio Project,OpenGLESTriangles
接下来我们来学习初始化Open GL ES
,MainActivity.java
内部代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
在Android 4.0以前我们进行Open GL
渲染主要依赖于GLSurfaceView
这个类,GLSurfaceView
实际上创建了一个自持的独立窗体,在View
层开放一个接口用于展示OpenGL Surface
中的内容,因此它不像普通View
一样对旋转,动画等支持的那么良好。在Android 4.0后添加了TextureView
用于展示OpenGL Surface
,这个View
并不像GLSurfaceView
一样需要创建一个单独的窗体,这里我们先学习使用GLSurfaceView
。
在MainActivity.java
中添加如下代码,用于声明GLSurfaceView
对象以及记录当前设置是否支持Open GLES2.0
:
private GLSurfaceView mGLSurfaceView;
private boolean mRendererSet = false;
随后我们需要判断当前设置是否支持Open GL ES 2.0
,如果支持,就初始化GLSurfaceView
,如果不支持,就弹出Toast
告知用户,具体代码如下:
/**
* help to judge whether device support open gl es version 2.0
* @param context
* @return true:support 2.0 version,false:do not support 2.0 version
*/
public static boolean isSupportOpenGLES2(Context context) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
return configurationInfo.reqGlEsVersion >= 0x20000 || (
VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH_MR1 && (
Build.FINGERPRINT.startsWith(FINGERPRINT_GENERIC) || Build.FINGERPRINT
.startsWith(FINGERPRINT_UNKNOWN) || Build.MODEL.contains(MODEL_GOOGLE)
|| Build.MODEL.contains(MODEL_EMULATOR) || Build.MODEL.contains(MODEL_SDK)));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
if (DeviceInfor.isSupportOpenGLES2(this)){
mGLSurfaceView.setEGLContextClientVersion(2);
mGLSurfaceView.setRenderer(new TriangleRenderer(this));
mRendererSet = true;
}else {
Toast.makeText(this, "This Device does not support open gl es 2.0 version!", Toast.LENGTH_SHORT).show();