android-GLSurfaceView.queueEvent不在GL线程中执行

概述我正在尝试从我的主要活动中为我的GLSurfaceView执行一些OpenGL命令.据我所知,由于OpenGL渲染器在其自己的线程中工作,因此我必须使用queueEvent.我在我的GLSurfaceView中使用以下代码调用queueEvent:queueEvent(newRunnable(){@Overridepublicvoidrun(){

我正在尝试从我的主要活动中为我的GLSurfaceVIEw执行一些OpenGL命令.据我所知,由于OpenGL渲染器在其自己的线程中工作,因此我必须使用queueEvent.

我在我的GLSurfaceVIEw中使用以下代码调用queueEvent:

queueEvent(new Runnable(){     @OverrIDe     public voID run() {          renderer.doSomething(data); //executes some OpenGL commands          requestRender();}});

doSomething()方法绑定纹理并编译着色器.

这是行不通的. glCreateProgram返回0,例如,在GL线程外执行GL命令时,会发生这种情况.如果从渲染器中执行相同的代码,也可以正常工作.因此,看来我使用queueEvent执行的命令不是在GL上下文中执行的,而是在错误的线程中执行的.

我的理解是,调用queueEvent足以在GL线程内执行代码是错误的吗?我还有什么要做的,还是现在我怎么称呼它的任何错误?

解决方法:

它进行了一些试验,似乎在某些情况下,虽然仍然在GL线程上,但queueEvent将在实际调用onSurfaceCreated之前执行Runnable.
如果您在Activity中的onResume之后立即使用queueEvent,则会发生这种情况.

我使用glClearcolor进行了实验,即使它毫无例外地调用了命令,背景也没有改变.也许GLContext仍然无法正确使用,并且命令什么也不做.

希望这可以帮助!

总结

以上是内存溢出为你收集整理的android-GLSurfaceView.queueEvent不在GL线程中执行全部内容,希望文章能够帮你解决android-GLSurfaceView.queueEvent不在GL线程中执行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1087594.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存