Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 14. prosinec 2017, 20:50:28 Předmět: Loading shaderů na Androidu |
|
|
Zase já a nějaký dotaz
Mám apku na Android, kde při startu builduju hromadu shaderů. Problém je, že to trvá dlouho (kolem 5s). Ideální by bylo je prebuildnout ale to jsem nějak nezjistil jak, resp. extension pro GL to nepodporuje.
Mám shadery každý ve dvou verzích (low, high) kdy v závislosti na FPS se přepínají. A pak pro každý image effect mám jiný, takže celkem asi 20 * 2 shaderů jenom na efekty. Pak dalších asi 10 je pro různé geometrie. Mohl bych udělat jeden monstr shader a ifovat, ale to se mi taky nelíbí, protože na mobilech hlavně ty podmínky nejsou moc ideální.
Jak tohle vyřešit? Jde to vůbec nějak...
Samozřejmě při loadu si cachuji shadery, které jsou stejné, takže např. veretx shadery pro ty efecty mám jen dva a zbytek jsou pixel shadery. Nicméně linking se pak provádí pro všechny. _________________ Perry.cz |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 608
|
Zaslal: 15. prosinec 2017, 00:34:23 Předmět: Re: Loading shaderů na Androidu |
|
|
- nešlo by použít něco jako glShaderBinary/glProgramBinary/glGetProgramBinary (a udělat si cache při prvním spuštění)?
- kolik trvá jeden největší shader? on demand by bylo moc pomalé?
- případně to rozdělit do víc framů po startu po jednom?
- nebo kompilovat jenom nejpoužívanější a zbytek on demand?
- teoreticky by driver mohl umět samotný překlad paralelizovat, nestačilo by provést kompilaci a linkování a až teprve potom pro všechny otestovat GL_LINK_STATUS? |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 15. prosinec 2017, 09:10:40 Předmět: |
|
|
On demand by šlo blbě.. já ty shadery skládám dynamicky při startu podle konfiguráku. Uloženou mám jen šablonu a vyměňuji určité funkce, zbytek je stejný.
Více framů nejde, už při prvním nevím který budu potřebovat.
Na zbytek se podívám, ale myslím, že předkompilaci to nepodporuje. _________________ Perry.cz |
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 15. prosinec 2017, 09:46:23 Předmět: |
|
|
Myslim, ze vetsina modernich zarizeni glGetProgramBinary (atd.) podporuje, i kdyz povinne to neni ani v ES 3. Na ostatnich holt budes mit fallback. |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
|
Návrat nahoru |
|
|
Radis
Založen: 29. 03. 2014 Příspěvky: 235
|
Zaslal: 15. prosinec 2017, 14:54:14 Předmět: |
|
|
Zeptas se na GL_NUM_PROGRAM_BINARY_FORMATS. Pokud implementace vrati 0, tak to nepodporuje. |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 15. prosinec 2017, 17:14:12 Předmět: |
|
|
Tak karta to podporuje, podle tutoriálu jsem to napsal, žádné errory to nepíše, vše se načte... a výsledek je prázdná obrazovka _________________ Perry.cz |
|
Návrat nahoru |
|
|
|