您的位置:首页 > 产品设计 > UI/UE

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

2014-01-27 17:09 316 查看
采用新架构结果测试提了一个神奇的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线程中调用。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息