OpenGL中的线程问题
来源:互联网 发布:百度外卖送餐员软件 编辑:程序博客网 时间:2024/06/06 14:16
用OpenGL做交互的时候,总需要处理点击事件吧。结果今天在处理点击事件的时候,遇到一个问题。当点击事件触发openGL的函数时返回的handle都是0。原以为资源没有释放,但是改变代码结构之后发现不是这个问题。仔细看log后发现了一句话:
call to OpenGL ES API with no current context (logged once per thread)
上网查查原因,说由于OpenGL是基于状态的,所以会为每个线程准备私有线程数据。所以新起一个线程来操作这个状态机当然就会有问题了。我怎么会新起一个线程呢?不都是UI线程在做这件事吗?错了。在使用GLSurfaceView的时候,Renderer里面都是在新线程里做的,目的是不耽误主线程办正事。所以,点击事件是UI线程发的,自然是另一个线程操作OpenGL。验证一下,在代码中打印调用OpenGL的线程号,结果初始化时是23396,点击事件触发的是1。找到问题了吧。
怎么解决?开始想在Renderer中写handler,可是系统说no。一时犯傻啊,既然系统设计了线程隔离机制,一定也会提供线程通信的方法喽!如下:
GLSurfaceView.queueEvent(Runnable r);
在点击的时候,操作放在Runnable中,就好啦~~
问题解决。
- OpenGL中的线程问题
- OpenGL选择模式中的问题
- opengl 多线程渲染中的问题
- OpenGL中的轨迹球问题
- GTK中的线程问题
- C#中的线程问题
- 线程中的小问题
- 线程中的死锁问题
- tomcat中的线程问题
- 线程中的冲突问题
- 线程中的问题
- java中的线程问题
- 线程中的并发问题
- 线程中的问题
- openGL嵌入到Vega中的问题
- Windows MFC 两个OpenGL窗口显示与线程RC问题
- ios开发中的线程问题
- Android开发中的线程问题
- phoneGap参考文档
- 【Silverlight】Bing Maps学习系列(六):使用扩展模式(Extended Modes)
- 第四章 初始化与清理
- dm9000aep,cep for wince6 驱动修改和读取注册表mac的方法
- java集合总结-List/Set/Map/Queue
- OpenGL中的线程问题
- Android开发之APN网络切换
- androidpn-client重要BUG-锁屏掉线解决方法
- Matlab2011a安装
- hdd mounted fail
- UIEdgeInsetsMake的作用
- 如何让自己的程序以管理员身份运行 C#
- 创建Zend Framework 项目 linux ubuntu 或者centos6.3下
- X11,xorg.conf配置详解