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

[SDL] Program zatrzymuje się podczas konwersji za pomocą SDL_ConvertSurface

Ostatnio zmodyfikowano 2015-07-12 15:00
Autor Wiadomość
Fedox9
Temat założony przez niniejszego użytkownika
[SDL] Program zatrzymuje się podczas konwersji za pomocą SDL_ConvertSurface
» 2015-07-12 14:30:10
Dzień Dobry

Uczę się SDLa z kursu LazyFoo, aktualnie przerabiam temat 6 http://lazyfoo.net/tutorials/SDL/06_extension_libraries_and_loading_other_image_formats/index2.php

Podczas przepisywania programu, zrobiłem coś źle, nie jestem pewien co. Program zatrzymuje się podczas konwersji obrazka za pomocą SDL_ConvertSurface.
Mimo kilku porównań z oryginalnym (i działającym) kodem nie znalazłem błędu.

C/C++
#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include <string>

const int SW = 640;
const int SH = 480;

SDL_Surface * surface = NULL;
SDL_Surface * pic = NULL;
SDL_Window * window = NULL;

bool init()
{
   
    printf( "2.Jestem w init()" );
   
    bool success = true;
   
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
       
        printf( "Nie mozna zainicjalizowac SDLa \n", SDL_GetError() );
        success = false;
       
    }
    else
    {
       
        printf( "3.Zaladowano SDLa\n" );
       
        window = SDL_CreateWindow( "NO ELO", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SW, SH, SDL_WINDOW_SHOWN );
        printf( "4.Stworzono okno\n" );
        if( window == NULL )
        {
           
            printf( "Blad podczas tworzenia okna \n", SDL_GetError() );
            success = false;
           
        }
        else
        {
           
            printf( "5.Inicjalizuje SDL_Img\n" );
            int imgFlags = IMG_INIT_PNG;
            if( !( IMG_Init( imgFlags ) & imgFlags ) )
            {
               
                printf( "SDL_img nie moglo zostac zainicalizowane! \n", IMG_GetError() );
                success = false;
               
            }
            else
            {
               
                surface = SDL_GetWindowSurface( window );
                printf( "6.okno jest na powierzchni \n" );
               
            }
           
        }
       
    }
   
    printf( "7.Wychodze z init \n" );
   
    return success;
   
}

SDL_Surface * loadSurface( std::string path )
{
   
    printf( "10.Jestem w loadSurface\n" );
   
    SDL_Surface * optimizedSurface = NULL;
   
    SDL_Surface * loadedSurface = IMG_Load( path.c_str() );
   
    printf( "11.png na loaded surface\n" );
   
    if( loadedSurface = NULL )
    {
       
        printf( "Blad przy ladowaniu obrazka \n", SDL_GetError() );
       
    }
    else
    {
       
        printf( "11.5.Optymilizuje obarzek" );
        optimizedSurface = SDL_ConvertSurface( loadedSurface, surface->format, NULL );
        //Tu program zatrzymuje się
        printf( "12.Zomptymalizownao obrazek \n" );
        if( optimizedSurface == NULL )
        {
           
            printf( "Blad przy optimilazcji obrazka \n", SDL_GetError() );
           
        }
       
        SDL_FreeSurface( loadedSurface );
        printf( "13.Uwolniono loadedSurface \n" );
       
       
    }
   
    printf( "14.Wychodze z loadSurface" );
   
    return optimizedSurface;
   
}

void close()
{
   
    printf( "24.Jestem w close. To koniec\n" );
   
    SDL_FreeSurface( pic );
    pic = NULL;
    SDL_DestroyWindow( window );
    window = NULL;
    IMG_Quit();
    SDL_Quit();
   
}

bool loadMedia()
{
   
    printf( "9.Jestem w loadMedia\n" );
   
    bool success = true;
   
    pic = loadSurface( "C:/SDL/bin/Debug/dixy.png" );
    printf( "15.Zaladowano obrazek\n" );
    if( pic == NULL )
    {
       
        printf( "Nie mozna zaladowac obrazka\n" );
        success = false;
       
    }
   
    printf( "16.Wychodze z loadMedia\n" );
   
    return success;
   
}

int main( int argc, char * args[] )
{
   
    printf( "1.Jestem w main\n" );
   
    if( !init() )
    {
       
        printf( "Blad przy inicjalizacji\n" );
       
    }
    else
    {
       
        printf( "8.Zainicjalizowano\n" );
       
        if( !loadMedia() )
        {
            printf( "blad przy ladowaniu obrazkow\n" );
           
        }
        else
        {
           
            SDL_Event e;
            bool quit;
           
            printf( "17.Zainicjalizowano SDL_Event\n" );
           
           
            while( !quit )
            {
               
                printf( "18.W glownej petli \n" );
               
                if( SDL_PollEvent( & e ) != 0 )
                {
                   
                    printf( "19.W if(SDL_PollEvent(&e) != 0) \n" );
                   
                    if( e.type = SDL_QUIT )
                    {
                       
                        quit = true;
                        printf( "23.quit = true;\n" );
                       
                    }
                   
                }
               
                printf( "20.Blit Surface \n" );
                SDL_BlitSurface( pic, NULL, surface, NULL );
                printf( "21.Aktualizuje okno \n" );
                SDL_UpdateWindowSurface( window );
                printf( "22.okno zaaktualizowane \n" );
               
            }
           
        }
       
    }
   
    close();
    printf( "26.Zwracam 0(?)" );
    return 0;
   
}

1.Jestem w main
2.Jestem w init()3.Zaladowano SDLa
4.Stworzono okno
5.Inicjalizuje SDL_Img
6.okno jest na powierzchni
7.Wychodze z init
8.Zainicjalizowano
9.Jestem w loadMedia
10.Jestem w loadSurface
11.png na loaded surface
11.5.Optymilizuje obarzek

Dziękuję
P-134589
pekfos
» 2015-07-12 14:54:09
C/C++
if( loadedSurface = NULL )
P-134591
Fedox9
Temat założony przez niniejszego użytkownika
» 2015-07-12 15:00:44
Rzeczywiście, dzięki. Na drugi raz będę dokładniej sprawdzał tego typu rzeczy.
P-134593
« 1 »
  Strona 1 z 1