Использование OpenGL из основного потока на Android - PullRequest
9 голосов
/ 08 марта 2011

Я хотел бы вызвать метод GLES20, когда выбран элемент из меню параметров.

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

Это не работает, поскольку я нахожусь в потоке main, а не в GLThread.Он говорит:

вызов API OpenGL ES без текущего контекста (регистрируется один раз для потока)

Но что мне нужно сделать, чтобы все заработало?

1 Ответ

17 голосов
/ 08 марта 2011

Я нашел ответ самостоятельно:

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;
        // ...
    }
}
...