[allegro]double buffering??

0

witam. z desperacji chcialem sie juz targnac na swoje zycie. kod jest obszerny, ale prosty-blagam o pomoc.

#include "allegro.h"
#include <time.h>

///////////////////////DEKLARACJE FUNKCJI I OBIEKTOW GLOBALNYCH/////////////////
void ustawienia_poczatkowe();
void ustawienia_koncowe();
bool laduj_kwadracik();
bool laduj_bufor();
void aktualny_czas();
void obieg_programu();
void rysuj_linie();
BITMAP* kwadracik = NULL;
BITMAP* bufor = NULL;
int zmienna = 0;
////////////////////////////////////////////////////////////////////////////////
int main()
{    
    ustawienia_poczatkowe();
    
    //dzielimy ekran
    rysuj_linie();
    
    //powolujemy do zycia bitmape kwadracik i tylni bufor
    laduj_kwadracik();
    laduj_bufor();
 

    //glowna czesc programu, wszystko bedzie sie wykonywalo co 10 milisekund
    LOCK_FUNCTION(obieg_programu);
    install_int(obieg_programu,10);
    
    //funkcja zatrzymujaca przed automatycznym zamknieciem sie programu
    readkey();
    ustawienia_koncowe();
    return 0;
}
END_OF_MAIN()
////////////////////FUNCKJE/////////////////////////////////////////////////////
void ustawienia_poczatkowe()
{
    allegro_init();
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,680,600,0,0);
    set_color_depth(8);
    set_palette(default_palette);
    clear_to_color(screen,15);
    //clear_to_color(bufor,15);
    install_keyboard();
    text_mode(-1);
}   
//-----------------------------
void ustawienia_koncowe()
{
     allegro_exit();
}
//-----------------------------
bool laduj_kwadracik()
{
     kwadracik = load_bitmap("kwadracik.pcx", default_palette);
        if(!kwadracik)
        {
        set_gfx_mode(GFX_TEXT,0,0,0,0);
        allegro_message("Nie moge zaladowac pliku z obrazkiem !\n");
        allegro_exit();
        return 0;
        }
}
//------------------------------
bool laduj_bufor()
{
  if(!(bufor = create_bitmap(680,600)))
  {
    set_gfx_mode(GFX_TEXT,0,0,0,0);
    allegro_message("Zamalo pamieci potrzebnej do stworzenia bufora ekranu !\n");
    allegro_exit();
    return 0;
  }
}
//-----------------------------
void aktualny_czas()
{
    time_t T = 0;
    struct tm *lt = NULL;

    time(&T);
    lt = localtime(&T);
    
    textprintf(bufor,font,10,10,1,"%d-%02d-%02d %02d:%02d:%02d",
    lt->tm_year + 1900,
    lt->tm_mon + 1,
    lt->tm_mday,
    lt->tm_hour,
    lt->tm_min,
    lt->tm_sec);
}
//----------------------------
void rysuj_linie()
{
    //vline(bufor,298,0,600,makecol(1,1,1));
    //vline(bufor,299,0,600,makecol(1,1,1)); 
}
//-----------------------------
void obieg_programu() 
{
        rysuj_linie();
 
        zmienna++;
        clear_to_color(screen,15);
        //clear_to_color(bufor,15);
        masked_blit(kwadracik, bufor, 0,0,480,zmienna, kwadracik->w,kwadracik->h);
        aktualny_czas();
}
END_OF_FUNCTION(obieg_programu)

w miejscach oznaczonych komentarzem jest blad. wszystko jest w porzadku gdy zamiast bitmapy bufor uzyje po prostu screen. jesli komus bedzie sie chcialo przez to przebijac-chwala mu za to:D

0

a co to za błąd?
pewnie coś jest nie tak z bufor = create_bitmap(680,600)

0

no wlasnie to jest ten najgorszy rodzaj bledu. wszytsko sie kompiluje, program startuje i sie zawiesza.tej funkcji uzywalem przedtem miliardy razy, ale faktycznie byc moze cos tutaj, bo na tej stworzonej bitmapie jak widac nie mozna w ogóle pracowac. nic narysowac, nawet wyczyscic. pfff..

0
player napisał(a)

no wlasnie to jest ten najgorszy rodzaj bledu. wszytsko sie kompiluje, program startuje i sie zawiesza.tej funkcji uzywalem przedtem miliardy razy, ale faktycznie byc moze cos tutaj, bo na tej stworzonej bitmapie jak widac nie mozna w ogóle pracowac. nic narysowac, nawet wyczyscic. pfff..

to moze poszukaj o co mu chodzi? masz debuger

0

problem rozwiklany ;-) dzieki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1