GLSurfaceView使用

在AndroidManifest.xml添加是否支持的

<!-- 设置gl版本 -->
    <uses-feature
        android:glEsVersion="0x00030000"
        android:required="true" />

代码判断是否支持opengl

private void checkSupported() {
        ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo();
        supportsEs2 = configurationInfo.reqGlEsVersion >= 0x2000;

        boolean isEmulator = Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
                && (Build.FINGERPRINT.startsWith("generic")
                || Build.FINGERPRINT.startsWith("unknown")
                || Build.MODEL.contains("google_sdk")
                || Build.MODEL.contains("Emulator")
                || Build.MODEL.contains("Android SDK built for x86"));

        supportsEs2 = supportsEs2 || isEmulator;
}

GLSurfaceView设置

  • 常用
//设置渲染器
setRenderer()
//设置OpenGl ES的版本 2->2.0 ,3->3.0
setEGLContextClientVersion()    
//设置渲染的模式(连续和手动)
setRenderMode()
//告诉它的画笔(GLSurfaceView.Renderer),要重新画画(渲染)
requestRender()
  • 其他
setDebugFlags(int)     
setEGLConfigChooser(boolean)
setEGLConfigChooser(EGLConfigChooser)     
setEGLConfigChooser(int, int, int, int, int, int)     
setGLWrapper(GLWrapper)

GLSurfaceView.Renderer 渲染器

渲染器运行的环境是opengl特定的环境,在一个独立的线程里面,这个线程也称之为gl线程,所以所有的gl程序处理都是围绕这个渲染器的以下三个回调函数

  • onSurfaceCreated

它是在Surface创建的时候被调用
在这个回调里面我们一般做gl的初始化工作以及准备一些固定数据,例如gl程序的创建,连接,加载都应该在这个回调来做

  • onSurfaceChanged

当GLSurfaceView大小改变时,对应的Surface大小也会改变。值得注意的是,
在Surface刚创建的时候,它的size其实是0,也就是说在画第一次图之前它也会被调用一次的。
(而且对于很多时候,Surface的大小是不会改变的,那么此函数就只在创建之初被调用一次而已)

  • onDrawFrame

这个函数是交给用户做绘制工作的,每调用一次就画一幅图
这个函数在第一次调用完之后,会根据模式不同调用的方式也不同,调用模式由GLSurfaceView的setRenderMode(int renderMode)决定,有两种模式:

第一种模式(RENDERMODE_CONTINUOUSLY):
连续不断的刷,画完一幅图马上又画下一幅。这种模式很明显是用来画动画的;

第二种模式(RENDERMODE_WHEN_DIRTY):
只有在需要重画的时候才画下一幅。这种模式就比较节约CPU和GPU一些,适合用来画不经常需要刷新的情况。
多说一句,系统如何知道需要重画了呢?当然是你要告诉它……
调用GLSurfaceView的requestRender ()方法,告诉它,你脏了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值