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

[SDL] Zużycie procesora

Ostatnio zmodyfikowano 2014-06-25 10:06
Autor Wiadomość
Marcin65
Temat założony przez niniejszego użytkownika
[SDL] Zużycie procesora
» 2014-06-24 19:52:45
Witam wszystkich,
przerabiam właśnie kurs SDL i postanowiłem napisać własny program.
Tu jest kod programu:
C/C++
#include <SDL/SDL.h>

SDL_Surface * ekran = NULL;
SDL_Surface * obraz = NULL;
const int width = 10, height = 10;
SDL_Rect sprst;
SDL_Rect dprst[ width * height ];
int main( int argc, char * args[] )
{
    SDL_Init( SDL_INIT_EVERYTHING );
    ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    obraz = SDL_LoadBMP( "obrazek.bmp" );
    sprst.x = 0;
    sprst.y = 0;
    sprst.w = 50;
    sprst.h = 50;
    while( 1 )
    {
       
        int k = 0;
        for( int i = 1; i <= width; i++ )
        {
            for( int j = 1; j <= height; j++ )
            {
                dprst[ k ].x = i * 50;
                dprst[ k ].y = j * 50;
                SDL_BlitSurface( obraz, & sprst, ekran, & dprst[ k ] );
                k++;
            }
        }
        SDL_Flip( ekran );
        //SDL_FreeSurface( ekran );
        SDL_Delay( 10 );
    }
    SDL_Quit();
    SDL_FreeSurface( obraz );
    return 0;
}
Jak zapewne zauważyliście jest to przerobiony przykład z czwartej lekcji kursu SDL. Program wyświetla 10 rzędów po 10 kolumn obrazu o wymiarach 50 x 50 pikseli. Zużywa przy tym 10-15% CPU.
To chyba za dużo. I tu pojawia się moje pytanie. Czy wynika to z mojego niedopatrzenia? Źle napisałem pętle, nie używam odpowiednich funkcji? Przecież używam funkcji SDL_Delay po każdym obrocie pętli głównej, która odpowiada standardowemu Sleep. A może ta biblioteka jest tak wolna?

Czekam na waszą odpowiedź.
P-112657
DejaVu
» 2014-06-24 19:58:01
SDL-a 1.2 nie używa możliwości sprzętowych karty graficznej do renderowania czegokolwiek. SDL 2.0 używa OpenGL-a lub DirectX-a, więc wykorzystuje sprzętowe możliwości karty graficznej. Prawie każda gra czasu rzeczywistego używa cały jeden rdzeń CPU do renderowania grafiki. Wyjątkiem są sytuacje w których jest używane usypianie procesu (Sleep lub jego odpowiednik) oraz alternatywnie włączona synchronizacja pionowa ograniczająca liczbę renderowanych FPS-ów zazwyczaj do 60 klatek/sec.
P-112658
Marcin65
Temat założony przez niniejszego użytkownika
» 2014-06-24 22:48:46
Dzięki za wyjaśnienie. Chyba czas najwyższy, żeby przerzucić się na nowszą wersję. Zrobicie kurs dotyczący SDL 2? Wiem, że są na innych stronach po angielsku, ale ja wolę wasze artykuły. :)
P-112675
MrPoxipol
» 2014-06-24 23:17:46
Zrobicie kurs dotyczący SDL 2? Wiem, że są na innych stronach po angielsku, ale ja wolę wasze artykuły. :)
Nie.

PS Angielskiego się ucz.
P-112679
pekfos
» 2014-06-25 10:06:50
Zrobicie kurs dotyczący SDL 2? Wiem, że są na innych stronach po angielsku, ale ja wolę wasze artykuły. :)
Nie.
"Njeeee..", hehe :P Zrobimy, a może i nie zrobimy. Będzie, jak ktoś go napisze, a administracja jest teraz raczej zajęta. Jak się nie ma co się lubi, to się czyta po angielsku, ten język musisz znać w programowaniu.
P-112695
« 1 »
  Strona 1 z 1