【问题标题】:Using OpenGL from the main thread on Android在 Android 的主线程中使用 OpenGL
【发布时间】:2011-03-08 15:53:33
【问题描述】:

选择“选项”菜单中的项目时,我想调用 GLES20方法。

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.clear:
            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
            break;
        // ...
    }
}

这不起作用,因为我在 main 线程中,而不是在 GLThread 中。它说:

在没有当前的情况下调用 OpenGL ES API 上下文(每个线程记录一次)

但是我必须做些什么才能让事情正常进行?

【问题讨论】:

    标签: android multithreading opengl-es


    【解决方案1】:

    我自己找到了答案:

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.clear:
                // GLSurfaceView.queueEvent
                surface.queueEvent(new Runnable() {
                    @Override
                    public void run() {
                        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
                    }
                });
                break;
            // ...
        }
    }
    

    【讨论】:

    • 嗨,matthias,我在 android 3.2 上遇到了同样的错误。你能告诉你什么时候你的应用程序遇到这个错误吗?
    • @RunO OpenGL 和主应用程序在不同的线程中运行。因此,您不能从主线程执行 OpenGL 命令(请参阅有问题的源代码)。因此,在主线程中,您必须将此命令排队到 OpenGL 线程(请参阅我的答案中的源代码)。我希望这有帮助。否则,开始一个新问题,描述你的问题,在评论中给我留下一个链接,我会看看我能做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多