首页 > 移动平台 > 详细

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

时间:2014-01-28 01:06:33      阅读:597      评论:0      收藏:0      [点我收藏+]

最近版本架构做调整,移植了一套成熟的架构(经受住了好几个版本考验)。结果测试提了一个神奇的BUG:打开应用程序硬件加速功能后,开启XX功能以后,View上的button和view背景都变成黑色色块,如下图:

bubuko.com,布布扣

追查结果哭笑不得: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线程中调用。。。

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

原文:http://blog.csdn.net/ryfdizuo/article/details/18151751

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!