Как предотвратить потерю клиентом In-App Billing контекста EGL? - PullRequest
1 голос
/ 03 апреля 2012

У меня есть проект Android с двумя действиями.Одним из них является мое основное занятие, использующее GLSurfaceView, которое обновляется из собственного кода.Другой - PurchaseActivity, который открывает клиент Google In-App Billing для совершения покупок.Создание покупок работает нормально.

Проблема, с которой я сталкиваюсь, заключается в том, что после завершения PurchaseActivity, успешно ли он завершается, ошибается или отменяется, и он переключается обратно на основное действие, контекст EGLисчезает, и я получаю:

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

После этого методы onSurfaceCreated() и onSurfaceChanged()retriggered.

Я нашел этот вопрос похожим, но мой уже выполняется в отдельном упражнении, и если я удаляю вызов finish(), он просто остается застрявшим в PurchaseActivity.

Действительно ли мне нужно перезагрузить текстуры после выполнения биллингового вызова в приложении?Кажется, что в этом нет необходимости, поскольку приложение не приостанавливается.

Мой код рендерера довольно прост, но по какой-то причине после закрытия окна клиента выставления счетов он вызывает новую поверхность и дуетмой родной код:

public class GameRenderer implements GLSurfaceView.Renderer
{   
    public void onSurfaceCreated(GL10 gl, EGLConfig config)
    { }

    public void onSurfaceChanged(GL10 gl, int width, int height)
    {
        BaseLib.setScreenSize(width, height);
        BaseLib.init();
    }

    public void onDrawFrame(GL10 gl)
    {
        BaseLib.render();
    }
}

1 Ответ

1 голос
/ 12 апреля 2012

Видели ли вы эту ветку?

Предотвращение сброса onPause из контекста OpenGL

Я полагаю, вы получаете onPause при переключении действий, что говорит GLSurfaceView:освободить ресурсы.

В API 11+ есть команда setPreserveEGLContextOnPause, но вы не уверены, подходит ли вам это решение, если вы хотите использовать более низкие уровни API, чем эта.

...