Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

SDL problem z wydajnoscią

Ostatnio zmodyfikowano 2011-03-20 20:03
Autor Wiadomość
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:
C/C++
#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;
}
P-29468
pekfos
» 2011-03-20 16:46:20
stopuj w pętli na 20ms
P-29469
kamillo121
» 2011-03-20 16:47:58
Low FPS

Ogólnie rzecz ujmując SDL jest wolne...
P-29471
Ł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.
P-29472
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
P-29476
kamillo121
» 2011-03-20 16:55:28
Przejdź sobie np na allegro albo sfml przynajmniej jest bardziej popularne i wydajniejsze.

(moja subiektywna ocena )
P-29477
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 :)
P-29479
kamillo121
» 2011-03-20 17:01:57
C/C++
ekran = SDL_SetVideoMode( 1024, 768, 32, SDL_HWSURFACE )

Wątpię, że zauważysz dużą zmianę :)
P-29480
« 1 » 2
  Strona 1 z 2 Następna strona