Texture Cache
3 posters
Sida 1 av 1
Texture Cache
Jag satt mig och skrev en texture cache för att sätta mig in i C++ objektorientering, containers och pekare.
Ladda ner här: spritecache.zip
Den verkar funka rätt bra. Testapplikationen ritar hela rutan med den valda texturen. Man byter textur med vänster/höger musknapp (upp/ner). Texturcachen är satt att ha en gräns på 10 texturer. När den överskrids tas den texturen som användes sist bort.
12.bmp är skitstor, för att man ska kunna se skillnad i minnet när den är laddad eller inte.
Jag har kört programmet en del, även med förändringen att byta textur mellan varje draw()-anrop, och minnesanvändningen varierar mellan 3.9 och 4.8 MB beroende på om textur 12 är inladdad eller inte. Min slutsats är således att min minneshantering inte har några läckor.
Där är ett problem som jag funderar på. Man kan inte spara en SDL_Surface man fått från en sprite och hålla på att rita med den. För det första noterar cachen då inte att man använder ytan, och för det andra finns ju risken att texturen laddas ur minnet om cachen skulle bli full. Så.. vi får helt enkelt låta bli att spara SDL_Surfaces, och helt enkelt hämta dem från cachen hela tiden. Det blir en del overhead med funktionsanropen, men inget katastrofalt tror jag. Det lär vi ju isåfall märka såsmåningom, och då tar vi det problemet då.
Det är dock viktigt att cachen skapas med en bra texturgräns. Säg att vi har en gräns på 3 texturer (absurt lite, men för exemplets skull), och så ritar vi träd, hus, sten, gubbe, hus, träd. Då kommer vi behöva ladda in träd-texturen andra gången där. Så.. Cachen bör ha plats för minst så många texturer som ska visas på skärmen samtidigt någon gång under spelets gång. Skulle något område gå slött att rita kan det vara en bra idé att kolla på texturcachens storlek, alltså.
Så.. Ladda ner zip-filen, kolla koden.. Vad tycks?
(programmet finns färdigkompilerat i Debug-mappen.. Linux-binär.)
Förresten, jag kommer att vara frånvarande en rätt stor del av dagen idag och imorgon. Kanske tittar in lite då och då. Vi får se.
Ladda ner här: spritecache.zip
Den verkar funka rätt bra. Testapplikationen ritar hela rutan med den valda texturen. Man byter textur med vänster/höger musknapp (upp/ner). Texturcachen är satt att ha en gräns på 10 texturer. När den överskrids tas den texturen som användes sist bort.
12.bmp är skitstor, för att man ska kunna se skillnad i minnet när den är laddad eller inte.
Jag har kört programmet en del, även med förändringen att byta textur mellan varje draw()-anrop, och minnesanvändningen varierar mellan 3.9 och 4.8 MB beroende på om textur 12 är inladdad eller inte. Min slutsats är således att min minneshantering inte har några läckor.
Där är ett problem som jag funderar på. Man kan inte spara en SDL_Surface man fått från en sprite och hålla på att rita med den. För det första noterar cachen då inte att man använder ytan, och för det andra finns ju risken att texturen laddas ur minnet om cachen skulle bli full. Så.. vi får helt enkelt låta bli att spara SDL_Surfaces, och helt enkelt hämta dem från cachen hela tiden. Det blir en del overhead med funktionsanropen, men inget katastrofalt tror jag. Det lär vi ju isåfall märka såsmåningom, och då tar vi det problemet då.
Det är dock viktigt att cachen skapas med en bra texturgräns. Säg att vi har en gräns på 3 texturer (absurt lite, men för exemplets skull), och så ritar vi träd, hus, sten, gubbe, hus, träd. Då kommer vi behöva ladda in träd-texturen andra gången där. Så.. Cachen bör ha plats för minst så många texturer som ska visas på skärmen samtidigt någon gång under spelets gång. Skulle något område gå slött att rita kan det vara en bra idé att kolla på texturcachens storlek, alltså.
Så.. Ladda ner zip-filen, kolla koden.. Vad tycks?
(programmet finns färdigkompilerat i Debug-mappen.. Linux-binär.)
Förresten, jag kommer att vara frånvarande en rätt stor del av dagen idag och imorgon. Kanske tittar in lite då och då. Vi får se.
QauNuckShin- Kodapa
- Antal inlägg : 70
Registreringsdatum : 08-07-21
Ålder : 37
Ort : Lund
Sv: Texture Cache
Äre bara jag som använder windows eller? Fick SDL att funka under dev-cpp nu. Tog de eftersom jag hade det installerat redan. Ett problem dock när jag snor din spritecache kod dock...
Building Makefile: "D:\Dev-Cpp\projekt\texturecache\Makefile.win"
Executing make...
make.exe -f "D:\Dev-Cpp\projekt\texturecache\Makefile.win" all
g++.exe main.o texturecache.o texture.o -o "texturecache.exe" -L"D:/Dev-Cpp/lib" -L"D:/Dev-Cpp/lib" -lmingw32 -lSDLmain -lSDL
D:/Dev-Cpp/lib/libSDLmain.a(SDL_win32_main.o)(.text+0x397): In function `console_main':
/Users/hercules/trunk/SDL-1.2/./src/main/win32/SDL_win32_main.c:217: undefined reference to `SDL_main'
collect2: ld returned 1 exit status
make.exe: *** [texturecache.exe] Error 1
Tar upp kampen igen efter cops, simpsons och family guy.
Building Makefile: "D:\Dev-Cpp\projekt\texturecache\Makefile.win"
Executing make...
make.exe -f "D:\Dev-Cpp\projekt\texturecache\Makefile.win" all
g++.exe main.o texturecache.o texture.o -o "texturecache.exe" -L"D:/Dev-Cpp/lib" -L"D:/Dev-Cpp/lib" -lmingw32 -lSDLmain -lSDL
D:/Dev-Cpp/lib/libSDLmain.a(SDL_win32_main.o)(.text+0x397): In function `console_main':
/Users/hercules/trunk/SDL-1.2/./src/main/win32/SDL_win32_main.c:217: undefined reference to `SDL_main'
collect2: ld returned 1 exit status
make.exe: *** [texturecache.exe] Error 1
Tar upp kampen igen efter cops, simpsons och family guy.
gouki- Moppepojke
- Antal inlägg : 29
Registreringsdatum : 08-07-21
Ålder : 37
Sv: Texture Cache
Det har jag redan och när jag skriver något eget så funkar det. Fungerade detta programmet för dig direkt?
EDIT: Det var inte värre än att jag bytte int main() mot int main(int args, char *argv[]) så fungerade det
EDIT: Det var inte värre än att jag bytte int main() mot int main(int args, char *argv[]) så fungerade det
gouki- Moppepojke
- Antal inlägg : 29
Registreringsdatum : 08-07-21
Ålder : 37
Sida 1 av 1
Behörigheter i detta forum:
Du kan inte svara på inlägg i det här forumet