C problem s allgero

Sekcia: Programovanie 24.06.2008 | 23:21
Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
cawte lidi mamtu jeden poblem ucim sa C a zrovna grafiku ale mam tu jeden problem ze ked spustim moj program a nakreslim kratku ciaru tak zamrzne ked nekreslim ide ok tu je ZDROJAK:

#include <allegro.h>
int main()
{
BITMAP* obrazocek;

allegro_init();
install_mouse();
install_timer();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) != 0)
{
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
allegro_message("Zlyhala grafika\n%s\n", allegro_error);
return 1;
}

show_mouse(screen);

while( ! keypressed())
{
if (mouse_b & 2)
{
show_mouse(NULL);
putpixel(screen, mouse_x, mouse_y, makecol(255,255,0));
show_mouse(screen);
}
}



readkey();
return 0;
}
END_OF_MAIN();


a SEM JE CHYBA
insert@insert-desktop:~$ cd Plocha
insert@insert-desktop:~/Plocha$ gcc 12.c -o 12 -lalleg-4.2.2
insert@insert-desktop:~/Plocha$ ./12
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 134 (XFree86-VidModeExtension)
Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Value in failed request: 0x3800003
Serial number of failed request: 2657563
Current serial number in output stream: 2657569
insert@insert-desktop:~/Plocha$

predom dik za rady
    • Re: C problem s allgero 25.06.2008 | 01:56
      Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
      U mna to bezi uplne v pohode:
      #include <allegro.h>
      
      int main()
      {
          allegro_init();
          install_mouse();
          install_timer();
          install_keyboard();
          set_color_depth(16);
          if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) != 0)
          {
              set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
              allegro_message("Zlyhala grafika\n%s\n", allegro_error);
              return 1;
          }
      
          show_mouse(screen);
      
          while( ! keypressed())
          {
              if (mouse_b & 2)
              {
                  show_mouse(NULL);
                  putpixel(screen, mouse_x, mouse_y, makecol(255,255,0));
                  show_mouse(screen);
              }
          }
      
          readkey();
          
          set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
          allegro_exit();
          return 0;
      }
      END_OF_MAIN();
      

      Inak, skus kompilovat prikazom gcc priklad.c -o priklad `allegro-config --libs`. Ak to stale bude padat, mozno mas len nedobru verziu allegra, kedze program samotny je ok.

      Napadlo mi este, ze skus pozriet pri init_mouse() a init_timer(), ci sa to dobre inicializovalo (pomocou navratovej hodnoty).
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: C problem s allgero 25.06.2008 | 02:10
        skywaker   Návštevník
        skus pridat do slucky:

        poll_mouse() -- je to na refresh udajov z mysky.-.ň
        neviem ci som to spravne napisal..

        a tiez poll_keyboard()

        skus malo bz to pomoct a tu BIitmapu vyhod ak nepouzivas.. sice kompiler by ta na to mal upozornit ak pouzivas warning
        • Re: C problem s allgero 25.06.2008 | 03:02
          Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
          Pri show_mouse sa pollne mys automaticky a keyboard len kontroluje stav buffra, takze je to zbytocne. Kazdopadne, nemoze to sposobovat padanie.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
          • Re: C problem s allgero 25.06.2008 | 03:17
            skywaker   Návštevník
            aha ...


            takze to bude asik tym ubuntu....
            :) len žartujem

            kompiloval si si allegro sam alebo si pouzil distribucne?
            • Re: C problem s allgero 25.06.2008 | 09:07
              Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
              mal som ho tu uz.... distbucne a pri tom prikaze ked dam:
              gcc priklad.c -o priklad `allegro-config --libs` tak mi to urobi presne to iste psuti sa mi to okno nakreslim kratku ciaru a potom mi to sekne az kym neresetnem PC..... a potom som este skusil ctrl+alt+f4 a ptoom spet ctrl+alt+f7 naskocila mi obrazovka aj bez resetnutia ale z strasne malim rozlisenim
              • Re: C problem s allgero 25.06.2008 | 11:30
                WlaSaTy   Návštevník
                ked to pustas z xwindows, tak ti potom ostane obrazovka v rozliseni ake si jej vnutil cez set_gfx_mode, vrat to cez xrandr alebo sa pozri ci neexistuje analogicka funkcia get_gfx_mode. ked to robis cez (zevraj) textovy mod, tak sa ti sekne frame buffer, comas za ovladace a grafiku ze sa ti neznasaju s frame bufferom a preco pouzivas ten frame buffer?.
                • Re: C problem s allgero 25.06.2008 | 13:02
                  Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
                  Neviem, ja by som to riesil skompilovanim si vlastnej kniznice. Na Mandrive som mal rovnaky problem s padanim allegro veci s kniznicou z repozitara.
                  Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
                • Re: C problem s allgero 25.06.2008 | 13:38
                  Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                  no ja mam grafiku saphirku ale neni este ku nej ovladac na LINUXA takze problem bude mozno aj v tom
    • Re: C problem s allgero 25.06.2008 | 13:56
      Avatar Miroslav Bendík Gentoo  Administrátor
      Osobne by som skúsil vypnúť fullscreen. Evidentne má xorg problém s prepínaním režimov. Prípadne to môže byť chyba ovládačov / allegra, mal som podobný problém, ale našťastie som nič v allegre písať nemusel.
      • Re: C problem s allgero 25.06.2008 | 14:18
        Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
        aha nooo ja sa len ucim grafiku takze skusat nieco v tom alegre... ale no newa neako to spravim... inac ked dam tak ze my neozbrazuje mis cisto iba ze mi to kresli tak to ide v poho len ked dam zobrazit mys sa to sere
        • Re: C problem s allgero 25.06.2008 | 15:03
          Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
          Tak fakt skus ten GFX_AUTODETECT_WINDOWED, co to spravi. Este mi teraz napadlo, ze som cital na jednom fore, ze v linuxe moze byt problem s uzamknutim screenu. Skus tento program, ci tiez bude mrznut:
          #include <allegro.h>
          
          int main()
          {
              BITMAP *bmp;
              allegro_init();
              install_mouse();
              install_timer();
              install_keyboard();
              set_color_depth(16);
              if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0)
              {
                  set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
                  allegro_message("Zlyhala grafika\n%s\n", allegro_error);
                  return 1;
              }
              bmp=create_bitmap(screen->w,screen->h);
              clear(bmp);
          
              show_mouse(bmp);
          
              while( ! keypressed())
              {
                  if (mouse_b & 2)
                  {
                      show_mouse(NULL);
                      putpixel(bmp, mouse_x, mouse_y, makecol(255,255,0));
                      show_mouse(bmp);
                  }
                  blit(bmp,screen,0,0,0,0,bmp->w,bmp->h);
              }
              show_mouse(NULL);
          
              readkey();
              
              destroy_bitmap(bmp);
              set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
              allegro_exit();
              return 0;
          }
          END_OF_MAIN();
          
          Pozn: Ano, uvedomujem si, ze to ma daleko od idealneho kodu, ale na skusku to postaci.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
          • Re: C problem s allgero 25.06.2008 | 15:29
            Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
            super hento mi ide a robi skoro to iste co moj program mohol by si mi dat ku tomu nieco akoby manual alebo nieco aby som pochpoil o co tam ide... dikyprsote vysvetlenie zdrojaku
            • Re: C problem s allgero 25.06.2008 | 15:32
              Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
              inac staci ked napises ku tomu blit... atd... ci to tvori to okienko ci ako to je?
            • Re: C problem s allgero 25.06.2008 | 16:00
              Avatar Samuel BWPOW Kupka CentOS, Mandriva  Používateľ
              #include <allegro.h>
              
              int main()
              {
                  BITMAP *bmp; /* Zadefinujem si pointer typu BITMAP */
                  allegro_init();
                  install_mouse();
                  install_timer();
                  install_keyboard();
                  set_color_depth(16);
                  if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) != 0)
                  {
                      set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
                      allegro_message("Zlyhala grafika\n%s\n", allegro_error);
                      return 1;
                  }
                  /* Naalokujem v ramke priestor na obrazok velkosti screen->w krat screen->h (v tomto pripade 640x480)
                     a s hlbkou definovanou set_color_depth (v tomto pripade 16bit) */
                  bmp=create_bitmap(screen->w,screen->h); 
                  /* A rovno ho aj vycistim -> bude cely cierny */
                  clear(bmp);
              
                  show_mouse(bmp);
              
                  while( ! keypressed())
                  {
                      if (mouse_b & 2)
                      {
                          show_mouse(NULL);
                          putpixel(bmp, mouse_x, mouse_y, makecol(255,255,0));
                          show_mouse(bmp);
                      }
                      /* Skopirujem obsah obrazku z pamate na obrazovku. Tento konkretny prikaz s tymito parametrami vzdy prekresli uplne celu obrazovku. 
                         Viac o parametroch prikazu blit sa docitas v manuali http://alleg.sourceforge.net/stabledocs/en/alleg014.html#blit */
                      blit(bmp,screen,0,0,0,0,bmp->w,bmp->h);
                  }
                  show_mouse(NULL);
              
                  readkey();
                  
                  /* Uvolnim pamat, ktoru zaberal obrazok */
                  destroy_bitmap(bmp);
                  set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
                  allegro_exit();
                  return 0;
              }
              END_OF_MAIN();
              Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
              • Re: C problem s allgero 25.06.2008 | 16:16
                Avatar rc-fox Ubuntu 8.04,Debian Lenny  Používateľ
                jasan dikes.... za rady chlapci..