Как обрабатывать события возобновления активности в Xamarain с помощью AndroidGameView - PullRequest
0 голосов
/ 28 декабря 2011

Каков наилучший способ правильно обрабатывать приостановленные / возобновляемые действия при использовании класса AndroidGameView?

Всякий раз, когда действие приостанавливается, все текстуры OpenGL очищаются, что требует их перезагрузки представлением. Похоже, что класс GLSurfaceView ( link ) имеет соответствующий механизм для правильной обработки этих событий. (Переопределив onResume.)

Как это должно работать с классом AndroidGameView ( link )? (Представление игры Android просто не поддерживает это?) Класс, похоже, имеет соответствующие хуки (в частности, Resume). Однако, когда Resume вызывается, GraphicsContext еще не был установлен.

Во время Resume вызов MakeCurrent() вызывает исключение:

System.InvalidOperationException: Operation requires a GraphicsContext, which hasn't been created yet.

Если я позвоню CreateFrameBuffer до MakeCurrent(), вы получите похожую ошибку:

Java.Lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface

Когда следует загружать / перезагружать какие-либо игровые текстуры в ответ на обратный вызов OnResume Действия при использовании AndroidGameView?

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Не знаю, ссылка помечена как правильный ответ. Это решение действительно при разработке с «чистым» Android в java, не использующим Xamarin Mono4Android (Monodroid) API.

Я нашел ответ на этот вопрос.

Лучший способ справиться с этим - восстановить текстуры восстановления при создании / уничтожении контекста OpenGL (и связанной с ним поверхности).

В Mono4Android вы должны использовать эти методы переопределения в AndroidGameView

override void CreateFrameBuffer()
{
    if(checkIfResourceWhereLost)
    {
       checkIfResourceWhereLost = false;
       // Code to RESTORE your textures
    }
}

override void DestroyFrameBuffer()
{
    checkIfResourceWhereLost = true;
    // Code to RELEASE all textures
}
0 голосов
/ 28 декабря 2011

Этот вопрос / ответ объясняет проблему с opengl-es на Android при очень хорошей паузе / возобновлении

0 голосов
/ 28 декабря 2011

Действия имеют несколько хороших методов для обработки таких вещей.OnStart, OnRestart, OnStop и так далее.Вы должны быть в состоянии переопределить их и делать там свои вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...