Nazgul Temat założony przez niniejszego użytkownika |
Długie ładowanie plików PNG (SOIL, OpenGL) » 2016-02-12 17:25:10 Chcę zrobić prostą grę. Mam problem, gdyż mimo swojej bardzo minimalistycznej konstrukcji, strasznie długo się ładuje podczas uruchamiania(potem działa już dobrze). Sprawdziłem co jest przyczyną, otóż jest to ładowanie tekstur. void loadtextures() { level0->texture = SOIL_load_OGL_texture( "level0.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT ); level1->texture = SOIL_load_OGL_texture( "level1.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT ); level2->texture = SOIL_load_OGL_texture( "level2.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT ); hero->texture = SOIL_load_OGL_texture( "hero.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT ); glEnable( GL_BLEND ); glEnable( GL_TEXTURE_2D ); glEnable( GL_DEPTH_TEST ); }
int main() { glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize( 792, 408 ); glutInitWindowPosition( 0, 0 ); glutCreateWindow( "Game" ); loadtextures(); glutDisplayFunc( display ); glutReshapeFunc( resize ); glutKeyboardFunc( keyboard_ ); glutKeyboardUpFunc( keyboardUp_ ); glutTimerFunc( 0, animation, 0 ); glutMainLoop(); }
Grafiki, które tu ładuję to: format .png, 32-głębia kolorów, kanał alfa, wymiary (level0,level1,level2) - 3000px X 3000px (duże), (hero) - 54px X 54px. sprawdzałem czy nie jest to spowodowane zbyt dużymi plikami graficznymi i pociąłem te duże grafiki na małe, po 512pxX512px jednak załadowanie 36 takich grafik żeby rozmiary się zgadzały z tymi dużymi trwało bardzo zbliżoną ilość czasu. ogólnie gra działa dobrze, tylko przeraża mnie to strasznie długie ładowanie kilku grafik.. Mógłby mi ktoś pomóc, jakoś nakierować w jaki sposób to zoptymalizować, będę bardzo wdzięczny. |
|
DejaVu |
» 2016-02-13 09:13:02 1. Upewnij się czy jest to plik png, a nie plik bmp ze zmienionym rozszerzeniem (czytaj: czy plik zajmuje stosunkowo mało miejsca na dysku). 2. Skompiluj grę w trybie Release. 3/ Porównaj czas ładowania dużego pliku przez gimpa vs Twoja gra. |
|
Nazgul Temat założony przez niniejszego użytkownika |
» 2016-02-13 20:23:16 1. plik png 3000pxX3000px waży 19MB, co wydaje mi się właściwym rozmiarem pliku PNG. 2. kompilowanie gry w trybie relase nie wpływa na szybkość ładowania, jedynie podczas ładowania pojawia się komunikat o braku odpowiedzi programu i pytanie czy chcę zaczekać 3. Gimp otwiera pliki mniej więcej 15 razy szybciej niż mój program
Biorąc pod uwagę to jak Gimp otwiera wszystkie pliki to i tak jest wolno
opiszę może schemat działania programu, być może w moim myśleniu jest błąd
mm moja koncepcja opierała się na załadowaniu mapy z plików PNG. level 0, to ziemia, level 1 to drzewa/ściany te rzeczy za któymi nie widać bohatera i level 2 np.dachy to co znika jak bohater wejdzie np. do domu oraz dodatkowo bitmapa(mapa dla programu, która poprzez sprawdzenie koloru piksela na indexach takich jakich jest bohater sprawdza czy bohater może w ogóle wejść na to pole (biały kolor-może wejść, czarny-nie może wejść). całość widać od góry jak w np.Sacred, Diablo.. zwykła mapka z pseudo 3D(imitowane 3D przez tekstury). jeden zestaw map (level0, 1, 2, bitmap) zawiera mapę, którą jesteśmy w stanie przejść w linii prostej w 30 sek(niezbyt dużo w porównaniu do 3 minutowego ładowania), a po przejściu do krawędzi mapy, ładowana jest następna mapa(znowu 3 minuty ładowania) i tak dalej.. mógłbym się pomęczyć i zrobić ładowanie następnych map w tle, ale i tak zagadkowe jest to że tak prosta gra ładowałaby się na początku wolniej niż np. wiedźmin 3.
Może ładowanie tekstur o takich wymiarach wymaga tyle czasu, a w wiedźminie jest załadowane znacznie mniejszy obraz, który jest powielany wielokrotnie.. hmm?
|
|
Lora |
» 2016-02-13 20:35:07 Sorry, nie doczytałem, że chodzi o ładowanie na samym początku gry. |
|
1aam2am1 |
» 2016-02-13 20:47:32 Usuń SOIL_FLAG_COMPRESS_TO_DXT |
|
Monika90 |
» 2016-02-13 20:48:26 Może tworzenie mipmap zabiera tyle czasu, czy jesteś pewien że są ci potrzebne? |
|
Nazgul Temat założony przez niniejszego użytkownika |
» 2016-02-13 21:17:07 szczerze mówiąc, nie są potrzebne;), zastąpiłem zastąpiłem "SOIL_load_OGL_texture( "...", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT );" na "SOIL_load_OGL_texture( "...", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, NULL);"
i faktycznie znacznie przyśpieszyło ładowanie;) teraz jest na poziomie takim jak jest łądowane w gimpie;) czyli około 30 sek
jednak ciągle nie rozumiem jak w tym wiedźminie 3 zrobili znacznie większy załadowany świat, znacznie większą ilość tekstur/obiektów oraz obliczeń fizycznych, a ładuje się tyle samo czasu. Jakby ktoś znał odpowiedź na to nurtujące mnie pytanie, to byłoby ekstra;)
Póki co, dzięki za pomoc;) |
|
Lora |
» 2016-02-13 21:51:55 |
|
« 1 » 2 |