Pomoc s OpenGL
Zdravím,
zkouším si psát vlastní OpenGL engine. Píšu to v Javě, takže jsem sáhl po LWJGL. Narazil jsem ovšem na jistý problém a to konkrétně s metodou glDrawElementsInstanced. Prošel jsem mnoho tutoriálů ale neustále mám problém s výkonem. Vím že s touhle metodou by neměl být problém vykreslit desetitisíce objektů, nicméně už při pár stech vidím problém se záseky, a pokud zvyšuju počet objektů na tisíce, tak GPU je totálně kaput. Stejně tak pozoruju problém s CPU, který na všech vláknech skáče od nuly až po maximum vytížení.
Pokud renderuju objekty pouze pomocí glDrawElements, tak jsem schopný bez nějakého výkonostního problému vyrenderovat asi necelých 2000 objektů.
Zkusil jsem vytvořit triviální shadery, vymazat skoro veškerou logiku aby renderování bylo naprosto minimalistické, ale glDrawElementsInstanced je pořád nepoužitelné.
Transformační matice objektů posílám do shaderu přes instanční vbo. Funkci glDrawElementsInstanced volám pouze jednou.
Vao vbo atd vytvářím tak, jak lze vidět na obrázcích a stejně tak renderování objektů.
Nejdříve jsem si myslel že problém je ve vboInstance, protože jsem pozice objektů aktualizoval, měnil počet objektů ve scéně, ale ikdyž jakékoliv aktualizace zruším, tak problém přetrvává.
A ještě taková zajímavost. Pokud mám ve scéně tak 50 až několik set objektů, tak CPU je vytížen na 3-5% a GPU na 30%, ale každých pár vteřin se to sekne, vytížení CPU je naráz klidně 50% a vytížení GPU klesne naopak na 20%. Tuším, že mám v tomhle kódu něco špatně, ale nepodařilo se mi to prozatím vyřešit a na internetu jsem k tomuhle nenašel nic co by mi pomohlo (kromě velké spousty tutoriálů a kódů, které jsem také vyzkoušel).
Našel by se tady někdo kdo OpenGL rozumí a mohl by mi poradit?
Předem díky.
Píšeš "engine GL" v knihovně, která ho používá ???
To se píše v C nebo v assembleru.