Android - переключение действий с рендерера - PullRequest
2 голосов
/ 16 сентября 2011

В моем приложении для Android я хочу переключать действия с моего рендерера.Когда я создаю Renderer, я передаю контекст в конструкторе.В моем рендерере в функции onDrawFrame:

public MyRenderer(Context ctx){

    this.context=ctx;
}

public void onDrawFrame(GL10 gl) {

    testFlag = renderFrame();


    if(testFlag > 0)
    {
        Intent myIntent = new Intent(this.context, MyActivity.class);
        myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        this.context.startActivity(myIntent);
        testFlag = 0;
        return;
    }


}

Это вызывает onPause () в моей основной деятельности, которая обрабатывает некоторые сотрудники OpenGL.:

В этот момент я получаю следующую ошибку:

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

Может кто-нибудь, пожалуйста, помогите мне?Я понимаю, что это вызвано тем, что вызов OpenGL не выполняется из потока OpenGL, но как я могу это исправить ??

Как правильно переключать действия из средства визуализации?

Ответы [ 2 ]

1 голос
/ 18 мая 2015

Я использовал эти источники:
Как запустить активность из класса, не относящегося к деятельности?
Как перезапустить активность Android
Этоявляется решением для переключения действий внутри класса, который не является классом Activity (например, Renderer)

    private Context context; 
    public MyGLRenderer(Context context)  {
    super();
    this.context = context;                         
}

            Intent myIntent = new Intent(context, MyActivity.class);
            myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            ((Activity)context).finish();
            ((Activity)context).overridePendingTransition(0, 0);
            context.startActivity(myIntent);
            ((Activity)context).overridePendingTransition(0, 0);

0 голосов
/ 16 мая 2015

Из документации GLSurfaceView.Renderer:

Threading
Средство визуализации будет вызываться в отдельном потоке, поэтому производительность рендеринга будет отделена от потока пользовательского интерфейса.Клиенты, как правило, должны общаться с средством визуализации из потока пользовательского интерфейса, потому что именно здесь поступают входные события.Клиенты могут общаться, используя любой из стандартных методов Java для связи между потоками, или они могут использовать queueEvent (Runnable) удобный метод.

Вы должны быть в состоянии сделать своеOpenGL правильно вызывает через такой Runnable, отправленный из вашего onPause() метода.

Я не думаю, что тот факт, что вы инициируете переключение активности из потока GL, является частью проблемы (это 1016 * кажется немного странным, но я полагаю, у вас есть на то веские причины:)).

...