.[ ČeskéHry.cz ].
Android - rotace obrazovky

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 21. říjen 2017, 19:41:43    Předmět: Android - rotace obrazovky Odpovědět s citátem

Nevím jeslti se s tím někdo setkal, ale mám OpenGL apku, kde renderuju do GLSurfaceView. Všechno běží, bohužel když udělám rotaci displeje, všechno spadne - resp. resetuje se mi OpenGL kontext a vytváření znovu sice jde, ale nepřipadá v úvahu, protože to je na hrozně dlouho (v poměru času když uživatel rotuje tam a zpátky). Na iOS se rotace děje automaticky a kontext se neztrácí.

Rendering mám v C++ přes JNI a GUI je v nativním androidu (Kotlin, ale podobně to bude i v Javě) a volá se to mezi sebou.

Pokud někdo ví co s tím, můžu případně poslat i nějaké zdrojáky.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 23. říjen 2017, 08:44:15    Předmět: Odpovědět s citátem

Ja delam presne tohle (C++ rendering a Java/JNI) a resim to standardne - v onSurfaceCreated() vsechno inicializuju znova, v mem pripade to funguje perfektne a rychle. V Androidu 3.2+ mas jeste k dispozici metodu GLSurfaceView.setPreserveEGLContextOnPause(). Ta ti sice nezaruci zachovani kontextu na vsech zarizenich a za vsech okolnosti, ale treba to pro tebe bude lepsi, nez kdyz se kontext vytvari znovu uplne pokazde. Dalsi moznost uz je pak jen pouzivat misto GLSurfaceView ciste SurfaceView a resit si lifetime EGL kontextu a threading sam, ale do toho bych se nepoustel.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 23. říjen 2017, 09:35:09    Předmět: Odpovědět s citátem

No to s tím "resetem" není možnost, protože rozbaluji různé dlaždice z JPG / PNG a cold start trvá v tomto případě skoro 2s+. V praxi při klasickém startu se to nestává, protože se to načítá postupně a "doskakuje". Nicméně při rotaci asi uživatel nebude moc "happy" když bude pořád čekat.

Další problém je, že používám "render to vertex buffer", takže ztáta kontextu = ztáta dat, protože nemám jejich kopii na CPU.

Zatím jsem našel¨připsání
kód:

android:configChanges="orientation|screenSize|keyboardHidden"

do manifestu a nastavení
kód:

setPreserveEGLContextOnPause(true)
.
Zdá se, že to funguje, ale nevím, zda to skutečně vždy ten kontext onPause zachová nebo ne.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 23. říjen 2017, 10:04:13    Předmět: Odpovědět s citátem

citace:
ale nevím, zda to skutečně vždy ten kontext onPause zachová nebo ne.

Kdyz je aplikace aktivni a jen menis orientaci displeje, tak je nepravdepodobne, ze by se kontext ztratil. Kdyz zamknes telefon a odemknes, tak uz treba jo. Zalezi na telefonu. Na high endech to nebude takovy problem jako na low endech, ktere nemaji dost pameti, aby udrzovaly nekolik kontextu se vsemi texturami. A nektera zarizeni vubec setPreserveEGLContextOnPause() nepodporuji. Proste zarucene to neni, takze to musis naprogramovat tak, aby aplikace nepadala, kdyz kontext ztratis. Holt si uzivatele se starymi telefony budou muset par sekund pockat Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 23. říjen 2017, 10:53:34    Předmět: Odpovědět s citátem

No vzhledem k tomu, že cílím zatím na ES 3, tak myslím ten problém bude ještě menší Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 23. říjen 2017, 12:52:13    Předmět: Odpovědět s citátem

Na to bych moc nespolehal. Jsem schopny vyvolat ztratu kontextu i na svem telefonu za 20k. To, ze cilis na high endy, by nemela byt omluva pro odbyte programovani. Ten kontext proste ztratit muzes a aplikace by pri tom crashovat zrovna nemusela Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 23. říjen 2017, 15:36:38    Předmět: Odpovědět s citátem

Jo, já vím že by to nemělo crashovat... Very Happy Jen že ten "fix" není otázka dnů a je lepší vydat aplikaci co opravuje kritické chyby, ale padá občas, než nechat tu, co padá za běhu Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna