Forum: SDL, lagg

Forum huvudsida -> Programmering -> SDL, lagg

Sidor: 1

Till botten

NetNinja 17:41 - 14:e Februari 2007 | Post #1
Medlem
Inlägg: 116


Skicka PM
Tja när jag kör detta programmet så tar det upp mellan 20-500 MB RAM-minne. Borde vara något med koden, iallafall här e den:

  1. int DisplayImage(SDL_Surface* destination, const char*, int x, int y)
  2. {
  3. // Ladda bilden
  4. SDL_Surface* image;
  5. SDL_Surface* image2;
  6. image2 = SDL_LoadBMP("island.bmp");
  7. image = SDL_LoadBMP("gubbe.bmp");
  8. if (image == NULL){
  9. cout << "Image could not be loaded!" << endl;
  10. return 1;
  11. }
  12.  
  13. SDL_Rect rect;
  14. rect.x = 0;
  15. rect.y = 0;
  16. rect.w = image2->w;
  17. rect.h = image2->h;
  18. SDL_BlitSurface(image2, NULL, destination, &rect);
  19.  
  20. // Skapa en rect
  21. rect.x = x;
  22. rect.y = y;
  23. rect.w = image->w;
  24. rect.h = image->h;
  25.  
  26. // Kopiera över bilden till ytan
  27. SDL_BlitSurface(image, NULL, destination, &rect);
  28. return 0;
  29. }


Resterande av koden är exakt samma som i independance tutorial, 3:dje sidan.

Ska testa hur Independences kod funkar utan det jag lade till.
EDIT: laggade fastän jag använde koden som Independence använde, måste vara något fel med biblioteket. Kan det vara någon patch ändring som spökar eller är det fel inställt på min dator...

-------------------------



Senast redigerad 17:56 - 14:e Februari 2007


Slash 19:47 - 14:e Februari 2007 | Post #2
Medlem
Inlägg: 141


Skicka PM
Jag vet inte hur SDL behandlar detta internt, men personligen gillar jag inte tanken att ladda om BMP:n varje gång bilden skall ritas om. Borde det inte vara bättre och snabbare att skicka med en SDL_Surface *source med bilden i till funktionen. Så kan den anropas med DisplayImage(dest, image2, 45, 22); eller liknande. Alltså

  1. SDL_Surface *image = SDL_LoadBMP...
  2. while (main loop)
  3. {
  4.  
  5. DrawImage(dest, image, 12, 65);
  6. }
  7. void DrawImage(SDL_Surface *dest, SDL_Surface *source, int x, int y)
  8. {
  9. ...
  10. ..blit(source, NULL, dest, ...
  11. ...
  12. }


-------------------------
Ingen sigantur!

Senast redigerad 19:47 - 14:e Februari 2007


NetNinja 20:20 - 14:e Februari 2007 | Post #3
Medlem
Inlägg: 116


Skicka PM
Tänkt lite på det också, fast man vågar ju inte säga emot Independence riktigt, specielt om man e noob. Ska testa så som du sa.

EDIT:
Funkade perfect. Nu ligger den nere på trygga 5mb ram användning istället för 500... Tack så mycket

-------------------------



Senast redigerad 20:30 - 14:e Februari 2007


FunkyChicken 20:50 - 14:e Februari 2007 | Post #4
Nyhetsredaktör
Inlägg: 800


Skicka PM
Har sett wrappers till DirectX som har en lista med bildobjekt, varje gång man laddar en ny bild så lägger den ett nytt objekt på högen och returnerar referensen dit. Alltså, de laddade objekten förstörs inte bara för att (i detta fall) dina image och image2 variabler strax försvinner igen. Gissar att sdl och sdl_loadbmp funkar på samma vi. Eller så tar det bara massa tid att läsa in bilden igen och igen...

Indys kod ska nog bara ses som en demonstration av hur funktionerna fungerar, inte som optimerad och användbar Smiley




NetNinja 21:15 - 14:e Februari 2007 | Post #5
Medlem
Inlägg: 116


Skicka PM
-h tack för all hjälp, bara en sak till innan jag slutar kan börja bygga. Hut gör man så att dom pixlar som är genomskinliga att dom inte syns?

Gjorde en gubbe som fick en vit ruta runt sig.
Tack för all hjälp.

-------------------------





Independence 22:00 - 14:e Februari 2007 | Post #6
Administratör
Inlägg: 1800


Skicka PM
Mjo, den koden som är i tutorialen är ju mer för att visa hur saker fungerar. Vet inte riktigt om den ligger i en loop där, men att ladda in bilden i rit-funktionen i huvudloopen låter ju inte direkt optimerat.

-------------------------

Vi är riddarna som säger fiskbulle!





Tesuki 00:50 - 15:e Februari 2007 | Post #7
Medlem
Inlägg: 122


Skicka PM
jag använde den koden i den genomgången den drog ca 15MB per 25ms. om och om och om igen. det var rätt snabbt uppe i 2000MB. så nu fungerar det programmet mycket bra för att testa minnes hantering på windows. dispose är mycket bra att använda.




Pilli 12:33 - 15:e Februari 2007 | Post #8
Medlem
Inlägg: 1


Skicka PM
Du vill nog köra SDL_FreeSurface på de där bilderna om du kör dem i loop så där.




Independence 13:32 - 15:e Februari 2007 | Post #9
Administratör
Inlägg: 1800


Skicka PM
Nja, man vill nog inte köra freesurface i en loop heller, det skulle dra väldigt mycket kraft från datorn. Ladda endast in dem en gång, och sedan ur dem en gång, istället.

-------------------------

Vi är riddarna som säger fiskbulle!





madah 20:06 - 15:e Februari 2007 | Post #10
Medlem
Inlägg: 28


Skicka PM
    Citat av Independence:
Nja, man vill nog inte köra freesurface i en loop heller, det skulle dra väldigt mycket kraft från datorn. Ladda endast in dem en gång, och sedan ur dem en gång, istället.


Hehe, det är nog bäst du editerar artikeln och lägger till en LoadImage-funktion samt ändrar DisplayImage så den tar en SDL_Surface* som parameter istället. Smiley




Independence 20:50 - 15:e Februari 2007 | Post #11
Administratör
Inlägg: 1800


Skicka PM
Lägga till en del om hur man använder kunskaperna man lärt sig till att göra ett spel kankse Smiley

-------------------------

Vi är riddarna som säger fiskbulle!





Sidor: 1

Forum huvudsida -> Programmering -> SDL, lagg
Atom feed

Du får inte posta i den här tråden | Till toppen