(FAQ - Linux...) Help??? Kann mir jemand ein Linie codieren!!!



  • hey,

    hab schon so einiges in c programmiert sogar mal ein Spiel.
    Doch seit ich kein Windows mehr hab und mich mit linx abmühe bekomm
    ich nicht mal mehr eine einfache Linie oder ein Kreis oder ein Pixel hin.

    Kann mir jemand ein kurzes Programm schreiben?

    #include < ??????????? > - was kommt da rein ???
    Grafiktreiber laden ???

    m.f.g
    micha 😕



  • Hi !

    Klar, du brauchst nur Clanlib (www.clanlib.org) :

    first.h

    #include <ClanLib/core.h>
    #include <ClanLib/display.h>
    #include <ClanLib/application.h>
    
    class CFirst : public CL_ClanApplication 
    {
    public:
            CFirst();
            ~CFirst();
            virtual char *get_title() { return "CFirst"; }
    
            virtual int main(int, char **);
            void render ();
    

    first.cpp

    #include "first.h"
    
    // This application instance is required or the app will not run
    CFirst applicationInstance; 
    
    CFirst::CFirst() {}
    CFirst::~CFirst(){}
    
    int CFirst::main(int, char **) 
    {
                    //CL initialization functions
                    //These must be called or CL functions will not work
                    //Also, SetupCore must be init()'ed first and denit()'ed last
                    CL_SetupCore::init();
                    CL_SetupDisplay::init();
    
                    //Set display mode (not fullscreen)
                    CL_Display::set_videomode(640, 480, 32, false);
    
                    render ();
    
                    //CL deinitialization functions
                    //These must be called because CL does not unload itself
                    CL_SetupDisplay::deinit();
                    CL_SetupCore::deinit();
    }
    
    void CFirst::render ()
    {
            while (!CL_Keyboard::get_keycode(CL_KEY_ESCAPE))
            {
                    CL_System::keep_alive();
                    CL_Display::clear_display(0, 0, 0, 1.0f);
                    //zeichnet eine Linie von (0,0) zu (20,23) mit der Farbe rot (1.0,0.0f,0.0f)
                    CL_Display::draw_line(0,0,20,23,1.0f,0.0f,0.0f);
    
                    CL_Display::flip_display();
            }
    }
    


  • Linie auf der Konsole zeichnen:

    /* lines.c */
    # include <stdio.h>
    # include <vga.h>
    
    int main()
     {
      if (vga_init())
        return(1);
      if (vga_setmode(G640x480x16))
        return(1);
      vga_clear();
      vga_setcolor(15);
      vga_drawline(0, 0, 639, 479);
      vga_getch();
      return(0);
     }
    

    Übersetzen mit "gcc lines.c -lvga -o lines" (svgalib muss installiert sein) und z.B. als root ausführen.

    Mehr dazu findest du in meinem Buch "C und Linux".

    Martin



  • kingruedi/Unix-Tom :

    Kann einer von euch diesen Thread mal in die FAQ tun ??
    Hab schon wieder jemanden aus dem Spiele&Grafikforum hierhin verwiesen, wäre toll wenn der Thread dauerhaft gespeichert werden würde 🙂



  • @martin G

    danke genau so ein beispiel hab ich gesucht.
    (Werb mir auch mal das Buch anschaun.)

    Allerdings findet er die vga.h nicht!
    Als sich dann mal die Platte durchsucht hab fand er gleich
    12 vga.h Datein.
    Bin etwas ratlos. (hab von linux nicht so viel Ahnung!)

    Kann mir jemand einen Tip geben was ich machen muß damit
    er nicht mehr meckert?

    Und was versteht man darunter: das die svgalib z.B als root
    ausgeführt sein muß???



  • Als sich dann mal die Platte durchsucht hab fand er gleich
    12 vga.h Datein.

    auch dort wo der Compiler nach den Header Dateien sucht? (also in /usr/include und /usr/local/include zB)? Ansonsten benutz mal die -I Option des GCCs (siehe Manual)

    Und was versteht man darunter: das die svgalib z.B als root
    ausgeführt sein muß???

    du musst das Programm mit Root Rechten ausführen, dh. dass du es entweder nur als Root ausführen kannst oder mit dem Suid Bit (siehe chmod)



  • Original erstellt von mini-paf:
    **Allerdings findet er die vga.h nicht!
    Als sich dann mal die Platte durchsucht hab fand er gleich
    12 vga.h Datein.
    Bin etwas ratlos. (hab von linux nicht so viel Ahnung!)

    Kann mir jemand einen Tip geben was ich machen muß damit
    er nicht mehr meckert?

    Und was versteht man darunter: das die svgalib z.B als root
    ausgeführt sein muß???**

    Damit du Grafik auf der Konsole (d.h. ohne die grafische Oberfläche X11) nutzen kannst, benötigst du das Paket "svgalib". Dieses musst du zunächst installieren (sollte bei deiner Distribution eigentlich dabei sein. Falls nicht kannst du es hier finden: www.rpmfind.net).
    Da diese Funktionsbibliothek (also die "libvga") auf die Register der Grafikkarte zugreifen muss, benötigt das Programm dazu "root"-Rechte. Explizit geht das so:
    > gcc -o lines -lvga lines.c
    > su
    Kennwort: hier dein root-Kennwort eingeben
    # chown root lines
    # chmod a+s lines
    # exit
    > ./lines

    (Das '#' soll das Prompt des Benutzers "root" darstellen. Das kann bei dir natürlich anders eingestellt sein.)

    Martin



  • Warum so umständlich? SUID-Root Programme sollte man wann immer möglich vermeiden. Für einen Installer ala SuSE YaST oder RedHat Anaconda kann es ja sinnvoll sein, direkt die Grafikkarte anzusprechen aber ansonsten ist es mehr als unnötig.

    Wenn du unter der X11 Oberfläche programmierst (egal ob direkt mit den X11 Libs oder über SDL, GTK+, Qt, ...) hast du alle Vorteile die dir XFree86 bietet. Zum Beispiel kannst du das Programm mehrmals starten (das geht nicht wenn bereits eine andere Instanz deines Programms im Grafikkartenspeicher rumpfuscht) oder aber auch mit Display-Umleitung arbeiten.

    Zu einem Beispiel wie man mit den X11 Libs bzw. mit SDL programmiert siehe
    ich möcht doch nur ne linie.

    Vielleicht kann ein Moderator die beiden Threads ja zusammenfassen und in die FAQ stellen...


Log in to reply