【踩雷】android 中UI线程内调用gl指令的结果

来源:互联网 发布:阿里云丁丁 编辑:程序博客网 时间:2024/06/05 02:57

采用新架构结果测试提了一个神奇的BUG:打开应用程序硬件加速功能后,开启XX功能以后,View上的button和view背景都变成黑色色块,如下图:


同事追查的结果哭笑不得:UI线程中调用调用了glDeleteTextures函数

每个GLContext都是单独一个GL环境,互不影响,类似OS中的两个进程空间。当开启硬件加速以后,UIView的GLContext中,所有view的纹理随机分配。GLSurfaceView的GLContext中,所有纹理ID也随机分配。

android的GLSurfaceView继承UIView即为UI主线程,其内部单独管理一个GL绘制线程。 UI线程中错误地调用GLSurfaceView中的glDeleteTextures,调用者本意是删除GLSurfaceView的一批纹理,结果实际上是 删除了UIView的GLContext中的对应ID的纹理。

android 中暂不支持定义自定义GLContext,不支持多线程共享GLContext,所以gl指令只能在GL线程中调用。。。

1 0