yoogi Temat założony przez niniejszego użytkownika |
SDL problem z wydajnoscią » 2011-03-20 16:43:35 Witam napisałem sobie proste okno w SDL'u na test i niestety zużywa bardzo dużo procesora, normalnie system mi zużywa koło 10% średnio, a po uruchomieniu aplikacji 50-70% nie wiem co może być przyczyną ale raczej samo wyświetlenie okna i wczytanie bitmapy to chyba nie problem. Oto kod: #include <SDL.h> #include <SDL_image.h> #include <SDL_mixer.h> #include <Windows.h> #include <iostream> #include <fstream> #include <audiere.h> #include "pole.h"
#pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "SDL_mixer.lib") #pragma comment(lib, "SDL_image.lib") #pragma comment(lib, "audiere.lib")
SDL_Surface * ziemia = IMG_Load( "files/image/ziemia.png" ); SDL_Surface * skala = IMG_Load( "files/image/skala.png" ); SDL_Surface * kula = IMG_Load( "files/image/kula.png" ); SDL_Surface * gem = IMG_Load( "files/image/gem.png" );
SDL_Rect rPole;
SDL_Surface * ekran = NULL; SDL_Event zdarzenie; Uint8 * keystate = SDL_GetKeyState( NULL ); bool wyjscie = false;
int main( int argc, char * args[] ) { ekran = SDL_SetVideoMode( 1024, 768, 32, SDL_SWSURFACE ); rPole.x = 0; rPole.y = 0; for( int i = 0; i < 24; i++ ) { for( int j = 0; j < 32; j++ ) { if( pole[ i ][ j ] == 1 ) { SDL_BlitSurface( ziemia, NULL, ekran, & rPole ); } if( pole[ i ][ j ] == 2 ) { SDL_BlitSurface( skala, NULL, ekran, & rPole ); } if( pole[ i ][ j ] == 3 ) { SDL_BlitSurface( ziemia, NULL, ekran, & rPole ); SDL_BlitSurface( kula, NULL, ekran, & rPole ); } if( pole[ i ][ j ] == 4 ) { SDL_BlitSurface( ziemia, NULL, ekran, & rPole ); SDL_BlitSurface( gem, NULL, ekran, & rPole ); } rPole.x = rPole.x + 32; } rPole.y = rPole.y + 32; rPole.x = 0; } SDL_Flip( ekran ); _sleep( 5000 ); SDL_FreeSurface( ekran ); SDL_Quit(); return 0; } |
|
pekfos |
» 2011-03-20 16:46:20 stopuj w pętli na 20ms |
|
kamillo121 |
» 2011-03-20 16:47:58 Low FPSOgólnie rzecz ujmując SDL jest wolne... |
|
Łukasz123 |
» 2011-03-20 16:49:30 Kod jest ok,SDL najszybszy nie jest a ty 768 razy wywołujesz 4ify,w momencie wykonywania tej forki może być duże obciążenie. Weź dodaj zdarzenia (tj.pętla gry w kursie SDL na stronie jest to) i zobacz wtedy. Albo zwal obciążenie na GPU flagą SDL_HWSURFACE. |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-03-20 16:53:53 dzięki stopowanie na 20 ms pomogło :), skoro SDL jest taki wolno to co lepiej użyć ? głównie zależy mi żeby było wczytywanie plików png |
|
kamillo121 |
» 2011-03-20 16:55:28 Przejdź sobie np na allegro albo sfml przynajmniej jest bardziej popularne i wydajniejsze.
(moja subiektywna ocena ) |
|
yoogi Temat założony przez niniejszego użytkownika |
» 2011-03-20 17:00:01 aha, a co do przerzucenia tego na GPU to jak to ma mniej więcej wyglądać ? bo nie bardzo rozumiem SDL'a prawie że nie znam :) |
|
kamillo121 |
» 2011-03-20 17:01:57 ekran = SDL_SetVideoMode( 1024, 768, 32, SDL_HWSURFACE )
Wątpię, że zauważysz dużą zmianę :) |
|
« 1 » 2 |