声明:博主已经一年多没有更新新代码了,回归后将创建OpenGL专栏,前端时间基本搭建完了一个分享创作类软件,后续也会把整个项目放出来,希望大家一起学习成长~一、Activity文件(MainActivity )package com.example.opengl import android.app.ActivityManager import android.content.Context import android.content.pm.ConfigurationInfo import android.opengl.GLSurfaceView import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.Menu import renderer.FirstOpenGLProjectRenderer import tool.DialogUtils class MainActivity : AppCompatActivity() { // 添加一个GLSurfaceView实例 -- 初始化OpenGL private lateinit var glSurfaceView: GLSurfaceView // 记住GLSurfaceView是否处于有效状态 private var rendererSet:Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化glSurfaceView glSurfaceView = GLSurfaceView(this) /** 检查系统是否实际支持OpenGL ES 2.0 **/ // 一 Android ActivityManager的一个引用 -- 用它获取设备配置信息 val activityManager:ActivityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager // 二 取出reqGlEsVersion变量检查OpenGL ES 版本号 -- 版本号为0x20000或后续版本 就可以使用OpenGL ES 2.0的API val configurationInfo:ConfigurationInfo = activityManager.deviceConfigurationInfo val supportsEs2:Boolean = configurationInfo.reqGlEsVersion >= 0x20000 /** 为OpenGL ES 2.0配置渲染表面 **/ if (supportsEs2) { val dialogUtil = DialogUtils(this, this) dialogUtil.showSelfTipDialog("结果提示弹窗", "This device supports OpenGL ES 2.0.") // 请求一个OpenGL ES 2.O 兼容的上下文 -- 配置surface视图 glSurfaceView.setEGLContextClientVersion(2) // 分配我们的渲染器 -- 传进自定义Renderer类的一个新实例 glSurfaceView.setRenderer(FirstOpenGLProjectRenderer()) // 记住渲染器(renderer)已经设置过了 rendererSet = true }else{ val dialogUtil = DialogUtils(this, this) dialogUtil.showSelfTipDialog("结果提示弹窗", "This device does not support OpenGL ES 2.0.") return } /** 添加另外一个调用把GLSurfaceView加入到这个activity中,并把它显示到屏幕上 替换旧的调用 setContentView(R.layout.activity_main) **/ setContentView(glSurfaceView) } override fun onCreateOptionsMenu(menu: Menu?): Boolean { return super.onCreateOptionsMenu(menu) } /** 处理Android Activity生命周期的事件 -- 否则如果用户切换到另外一个应用,应用就会崩溃 有了他们,这个surface视图才能正确暂停并继续后台渲染线程,同时释放和续用OpenGL上下文 * **/ override fun onPause() { super.onPause() if (rendererSet){ glSurfaceView.onPause() } } override fun onResume() { super.onResume() if (rendererSet){ glSurfaceView.onResume() } } }二、渲染器类文件(FirstOpenGLProjectRenderer)package renderer import android.opengl.GLES20.* import android.opengl.GLSurfaceView import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.opengles.GL10 class FirstOpenGLProjectRenderer: GLSurfaceView.Renderer { override fun onSurfaceCreated(p0: GL10?, p1: EGLConfig?) { /** 设置清空屏幕用的颜色 * 前三个参数分别对应红色、绿色和蓝色 * 最后一个参数对应一个特殊的分量 -- 阿尔法(alpha)用来表示半透明度或透明度 * 通过把第一个分量设为1,其余设为0,我们把红色设置为最大强度,当屏幕被清空时,它就会显示红色 * **/ glClearColor(1.0f,0.0f,0.0f,0.0f) } override fun onSurfaceChanged(p0: GL10?, width: Int, height: Int) { /** 设置OpenGL视图填充整个屏幕 * 设置视口尺寸,告诉OpenGL可以用来渲染的surface的大小 * **/ glViewport(0,0,width,height) } override fun onDrawFrame(p0: GL10?) { /** 清除渲染屏幕 * 擦除屏幕上的所有颜色,并用之前glClearColor()调用定义的颜色填充整个屏幕 * **/ glClear(GL_COLOR_BUFFER_BIT) } }三、运行结果
声明:博主已经一年多没有更新新代码了,回归后将创建OpenGL专栏,前端时间基本搭建完了一个分享创作类软件,后续也会把整个项目放出来,希望大家一起学习成长~一、Activity文件(MainActivity )package com.example.opengl import android.app.ActivityManager import android.content.Context import android.content.pm.ConfigurationInfo import android.opengl.GLSurfaceView import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.Menu import renderer.FirstOpenGLProjectRenderer import tool.DialogUtils class MainActivity : AppCompatActivity() { // 添加一个GLSurfaceView实例 -- 初始化OpenGL private lateinit var glSurfaceView: GLSurfaceView // 记住GLSurfaceView是否处于有效状态 private var rendererSet:Boolean = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 初始化glSurfaceView glSurfaceView = GLSurfaceView(this) /** 检查系统是否实际支持OpenGL ES 2.0 **/ // 一 Android ActivityManager的一个引用 -- 用它获取设备配置信息 val activityManager:ActivityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager // 二 取出reqGlEsVersion变量检查OpenGL ES 版本号 -- 版本号为0x20000或后续版本 就可以使用OpenGL ES 2.0的API val configurationInfo:ConfigurationInfo = activityManager.deviceConfigurationInfo val supportsEs2:Boolean = configurationInfo.reqGlEsVersion >= 0x20000 /** 为OpenGL ES 2.0配置渲染表面 **/ if (supportsEs2) { val dialogUtil = DialogUtils(this, this) dialogUtil.showSelfTipDialog("结果提示弹窗", "This device supports OpenGL ES 2.0.") // 请求一个OpenGL ES 2.O 兼容的上下文 -- 配置surface视图 glSurfaceView.setEGLContextClientVersion(2) // 分配我们的渲染器 -- 传进自定义Renderer类的一个新实例 glSurfaceView.setRenderer(FirstOpenGLProjectRenderer()) // 记住渲染器(renderer)已经设置过了 rendererSet = true }else{ val dialogUtil = DialogUtils(this, this) dialogUtil.showSelfTipDialog("结果提示弹窗", "This device does not support OpenGL ES 2.0.") return } /** 添加另外一个调用把GLSurfaceView加入到这个activity中,并把它显示到屏幕上 替换旧的调用 setContentView(R.layout.activity_main) **/ setContentView(glSurfaceView) } override fun onCreateOptionsMenu(menu: Menu?): Boolean { return super.onCreateOptionsMenu(menu) } /** 处理Android Activity生命周期的事件 -- 否则如果用户切换到另外一个应用,应用就会崩溃 有了他们,这个surface视图才能正确暂停并继续后台渲染线程,同时释放和续用OpenGL上下文 * **/ override fun onPause() { super.onPause() if (rendererSet){ glSurfaceView.onPause() } } override fun onResume() { super.onResume() if (rendererSet){ glSurfaceView.onResume() } } }二、渲染器类文件(FirstOpenGLProjectRenderer)package renderer import android.opengl.GLES20.* import android.opengl.GLSurfaceView import javax.microedition.khronos.egl.EGLConfig import javax.microedition.khronos.opengles.GL10 class FirstOpenGLProjectRenderer: GLSurfaceView.Renderer { override fun onSurfaceCreated(p0: GL10?, p1: EGLConfig?) { /** 设置清空屏幕用的颜色 * 前三个参数分别对应红色、绿色和蓝色 * 最后一个参数对应一个特殊的分量 -- 阿尔法(alpha)用来表示半透明度或透明度 * 通过把第一个分量设为1,其余设为0,我们把红色设置为最大强度,当屏幕被清空时,它就会显示红色 * **/ glClearColor(1.0f,0.0f,0.0f,0.0f) } override fun onSurfaceChanged(p0: GL10?, width: Int, height: Int) { /** 设置OpenGL视图填充整个屏幕 * 设置视口尺寸,告诉OpenGL可以用来渲染的surface的大小 * **/ glViewport(0,0,width,height) } override fun onDrawFrame(p0: GL10?) { /** 清除渲染屏幕 * 擦除屏幕上的所有颜色,并用之前glClearColor()调用定义的颜色填充整个屏幕 * **/ glClear(GL_COLOR_BUFFER_BIT) } }三、运行结果