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

[SFML 2.1] Zacinanie sie programu przy próbie wczytania sf::Texture( 50% przypadków)

Ostatnio zmodyfikowano 2014-07-01 11:41
Autor Wiadomość
colorgreen19
Temat założony przez niniejszego użytkownika
[SFML 2.1] Zacinanie sie programu przy próbie wczytania sf::Texture( 50% przypadków)
» 2014-06-30 17:00:55
C/C++
class TextureManager
{
public:
    TextureManager();
    ~TextureManager();
   
    typedef map < string, Texture * > mapT;
    //static mapT Textures;
   
    static void LoadTexture( const string name, const string filename );
    static void EraseTexture( const string name );
   
   
    static Texture * GetT( const string tname );
   
    static mapT & GetTexture();
   
    static void CoutTextures()
    {
        for( auto i = Textures.begin(); i != Textures.end(); i++ )
        {
            cout << i->first << endl;
        }
    }
protected:
private:
    static mapT Textures;
};
C/C++
TextureManager::mapT TextureManager::Textures;

TextureManager::TextureManager()
{
    cout << "\tCONSTRUCTOR: TextureManager" << endl;
}

TextureManager::~TextureManager()
{
    for( auto i = Textures.begin(); i != Textures.end(); i++ )
    {
        delete i->second;
    }
}

void TextureManager::LoadTexture( const string name, const string filename )
{
    Texture * t = new Texture;
    if( !t->loadFromFile( filename.c_str() ) )
    {
        cout << "Couldnot load texture \"" << filename << "\"" << endl;
        return;
    }
    else cout << "Texture loaded \"" << filename << "\"" << endl;
   
    Textures[ name ] = t;
}

void TextureManager::EraseTexture( const string name )
{
    delete Textures[ name ];
    Textures.erase( name );
}

Texture * TextureManager::GetT( const string tname )
{
    cout << "TextureManager found... " << tname << endl;
    return Textures[ tname.c_str() ];
}

TextureManager::mapT & TextureManager::GetTexture()
{
    return Textures;
}
Logi z konsoli

Core_Start()
Core_Loading()
CONSTRUCTOR: Settings
Settings_LoadSettings()
WindowX: 1600
WindowY: 900
Fullscreen: false
Language: PL
DESTRUCTOR: Settings
Core_MainLoop()
CONSTRUCTOR: Callback
Decoder_DecodeState()
Decoder_MainMenuShowing()
CONSTRUCTOR: Callback
CONSTRUCTOR: MainMenu
Texture loaded "Files/tex/GUI_Button_Menu.png"
CONSTRUCTOR: Widget
CONSTRUCTOR: Button
TextureManager found... GUI_Button_MainMenu
CONSTRUCTOR: Widget
CONSTRUCTOR: Button
TextureManager found... GUI_Button_MainMenu
CONSTRUCTOR: Widget
CONSTRUCTOR: Button
TextureManager found... GUI_Button_MainMenu
DESTRUCTOR: Widget
DESTRUCTOR: Widget
DESTRUCTOR: Widget
DESTRUCTOR: MainMenu
DESTRUCTOR: Callback
Decoder_DecodeState()
Decoder_Playing()
CONSTRUCTOR: Callback
CONSTRUCTOR: Manager
CONSTRUCTOR: Widget
CONSTRUCTOR: Button
CONSTRUCTOR: Editbox
CONSTRUCTOR: Widget
CONSTRUCTOR: Widget
CONSTRUCTOR: Game
Game_Show();
CONSTRUCTOR: Map
Map::LoadStage( filename, texfilename, tilesize);

Map COLUMNS 84   Map ROWS 27
Map::Load( tileset, int tileSize, int* tiles, width, height);
Map Loaded
Texture loaded "Files/tex/GUI_Palete_Character_Info.png"
Texture loaded "Files/tex/GUI_Hp_Template.png"
odpowiednik w programie
C/C++
mapa = new Map;
mapa->Map_LoadStage( "Files/maps/stage1.stage", "Files/maps/stage1.png", 32 );


TextureManager::LoadTexture( "GUI_Palete_Character_Info", "Files/tex/GUI_Palete_Character_Info.png" );
TextureManager::LoadTexture( "GUI_Hp_Template", "Files/tex/GUI_Hp_Template.png" );
TextureManager::LoadTexture( "GUI_ItemField", "Files/tex/GUI_ItemField.png" );

TextureManager::LoadTexture( "GUI_Wizard_Basic", "Files/tex/GUI_Wizard_Basic.png" );
TextureManager::LoadTexture( "GUI_Wizard_Explosion", "Files/tex/GUI_Wizard_Explosion.png" );
TextureManager::LoadTexture( "GUI_Archer_Basic", "Files/tex/GUI_Archer_Basic.png" );
TextureManager::LoadTexture( "GUI_Archer_MultiArrow", "Files/tex/GUI_Archer_MultiArrow.png" );

TextureManager::LoadTexture( "BuffHp", "Files/tex/Buffs/BuffHp.png" );
TextureManager::LoadTexture( "BuffHpRegen", "Files/tex/Buffs/BuffHpRegen.png" );
TextureManager::LoadTexture( "BuffSp", "Files/tex/Buffs/BuffSp.png" );
TextureManager::LoadTexture( "BuffSpRegen", "Files/tex/Buffs/BuffSpRegen.png" );

TextureManager::LoadTexture( "MotionWizard", "Files/tex/Motions/MotionWizard.png" );

TextureManager::LoadTexture( "MotionMobAlien", "Files/tex/Motions/MotionMobAlien.png" );
czasami sie tu program scrashuje na tym miejscu co widać w logach, a czasami nie. nie wiem czy to przez błąd w kodzi czy przez co wiec prosze o pomoc
P-112992
DejaVu
» 2014-06-30 17:06:42
Crash może nastąpić wtedy, gdy tekstura jest w nieprawidłowym formacie, jednak problem wówczas jest powtarzalny (przynajmniej taką własność posiadał libjpeg/libpng jakiś czas temu z których korzysta SFML).

Aplikacja również się wysypie, gdy tekstury będziesz chciał wczytać przed utworzeniem okna SFML.
P-112993
Witold
» 2014-07-01 11:41:19
Ten kod jest sam w sobie trochę niebezpieczny.

void TextureManager::EraseTexture( const string name )

Texture * TextureManager::GetT( const string tname )

Co się stanie jeśli takich tekstur niema?

void TextureManager::LoadTexture( const string name, const string filename )

Wyciek pamięci jeśli nie załaduje tekstury.

TextureManager::mapT & TextureManager::GetTexture()

Modyfikujesz objekt z zewnątrz?
P-113018
« 1 »
  Strona 1 z 1