C/C++ und Graphik



  • EDIT/



  • Unter Windows kannst du immernoch die alten VESA, EGA und VGA Dinger benutzen Ich weiß nicht, ob die emuliert werden aber da könnte man anfangen, da ziemlich einfach (Musst nur n bisschen Assembler können).
    Im Mode 13h kriegst du dann einen Speicherplatz, in dem jeder Pixel ein Byte ist (Auflösung 320x200 = 64000 Bytes). Aber wahrscheinlich willst du sowetwas nicht, da es veraltet ist und nichts mit heutiger Grafik zu tun hat.

    Gruß
    Don06


  • Administrator

    Täusche ich mich oder habe ich eigentlich bisher keine Antwort auf meine Hauptfrage bekommen? 😃

    Weiss niemand Rat oder zumindest wo ich womöglich Rat finden kann? Google, Amazone und co helfen nicht so recht. Mit Suchwörter wie WinAPI oder X11 bekommt man nur Bücher und Erklärungen, wie man diese Bibliotheken anwendet, aber irgendwie nirgends, wie man so eine baut oder wie sie gebaut wurden usw. ^^

    Irgendwie scheint mir, wenden alle die Bibliotheken an, aber keiner weiss so recht, was dahinter wirklich genau abläuft. bzw. wie sie aufgebaut sind. 😃

    Grüssli



  • Was willst du von uns wissen? Ich denke nicht, das hier niemand weiß, wie man einen Grafikspeicher füllt. Hier wurde schon der Mode 13 oder Mode X genannt. Das ist der bekannteste VESA-Modus. Lies einfach die Doku/Specifikation dazu, und hau in die Tasten.

    Wenn du einen 3D-Chip ansprechen willst, mußt du dir Doku vom Grafikchip-Hersteller besorgen. Ach stimmt ja, die kennen nur die Hersteller selber, deshalb fehlen größtenteils 3D-Treiber unter Linux.

    Was willst du also von uns? Es ist nichts spektakuläres dabei ein paar Register und Speicheradressen eines Grafikchips anzusprechen. Wie hier jemand schon sagte, das ist nicht magisches, es ist reine fleissarbeit. Schon auf dem C64 hat jeder Programmierer den VIC (Video Interface Chip) per Assembler angesprochen, in dem er einfach ein paar Speicheradressen verändert hat und dann ist auf dem Bildschirm was passiert. Wenn ich auf dem VIC die Speicheradresse 53280 mit 8bit-Wert gesetzt habe, hat sich die Bildschirmfarbe des C64 geändert. mit 53281 hat sich der Bildschirmrand geändert (sowas gibts auf PCs nicht, auf Homecomputern gabs das, wirst du wahrscheinlich garnicht kennen). Wenn ich in der linken oberen Bildschirmecke einen weißen Pixel setzen wollte, habe ich an Speicheradresse sowieso den 8bit-Wert 1 gesetzt. Wenn ich eine Linie zeichen wollte, habe ich halt mehrere Speicheradressen geändert.

    Das ist einfaches Computertechnik-Wissen. Und ich glaube nicht, das wir dir hier die ganze Geschichte erzählen müssen, wenn selbst zu C64-Zeiten die Leute ohne Internet es geschafft haben. Und gerade deshalb ist es unspannend sowas lowleveliges zu programmieren und lieber eine fertige Grafiklib oder besser gesagt Treiber-API zu benutzen.

    Also mach dich gefälligst nicht über uns lustig, wenn du es nicht mal schaffst per google ein paar Infos zu finden, wenn zu Non-Internetzeiten die Leute ganze Computer in Assembler programmiert haben.



  • Doku/Specs zum PowerVR2-Grafikchip (von der Dreamcast):
    http://mc.pp.se/dc/pvr.html
    Mit den Infos kann man den Chip ansprechen und programmieren. Aber wer macht das freiwillig? Niemand! Für die Dreamcast hat ein Programmierer eine entsprechende Opensource-Library (KallistiOS) programmiert, und alle DC-Hobbyprogger benutzen diese Lib. Niemand macht sich die Arbeit nochmal... sinnlos und unspannend.

    Das gleiche für den VIC:
    http://www.c64-wiki.de/index.php/VIC

    Mode 13 Infos:
    http://atrevida.comprenica.com/atrtut07.html


  • Administrator

    Lustig über euch? Ich? Komme ich nicht auf die Idee ^^

    Was ich will? Naja, ich hätte gedacht, dass es halt sowas wie ein theoretisches Buch zur Kreierung von APIs und co gäbe und das mir hier jemand eines empfehlen könnte. Ich meine es gibt Bücher/Werke zu allem möglichen von dem lernen von C++, dem "richtigen" Umgang mit der Objektorientierung, Treiberprogrammierung usw. usf.
    Hab halt gedacht, dass es auch sowas für API und co gäbe. Halt ein Werk das zusammenfasst, einführt und erläutert. Von Standards redet, Möglichkeiten, Vorgehen, Theorien, Philosophien usw. usf.

    Zudem sagt ihr mir halt immer wieder Häppchenweise was darüber, aber ich frage mich halt eben, ob es nicht ein Buch gäbe, welches sowas alles zusammenfasst und als ein ganzes behandelt 😉

    Grüssli



  • Grafik und API Erstellung sind zweierlei Dinge.
    Wenn du was über API Erstellung wissen willst, solltest du dir OOP/OOA/OOD anschauen,
    evtl auch MDA und ähnliche Konzepte.



  • Also wenn ich dich richtig verstanden hab suchst du ein Buch "Grafik-API von Grund auf bauen"... Hmmmm... das interessiert normalerweise keinem (Gruende wurdem im Thread ja schon oft genannt), aber ich erinnere mich wage, im Hugi ( http://www.hugi.scene.org/ ) einen Verweis auf ein Tutorial/Vortrag einer Demo-Group gesehen zu haben, die sich mit sowas beschaeftigt hat, kann dir aber leider nicht mehr sagen in welcher Ausgabe, aber ich glaub in einer der letzten 10.

    EDIT: den Artikel meinte ich: http://www.hugi.scene.org/online/hugi32/hugi 32 - coding corner seven my mistakes in gui design.htm da steht wohl doch nicht so viel was du brauchen kannst, aber vielleicht kannst du den Typ, der die Seminare, von denen die Rede ist, mal anschreiben ob er dir die alten Seminar-Unterlagen schickt oder so...


  • Administrator

    @phlox81,
    OOP, OOA, OOD und co schaue ich mir schon lange (kurz nachdem ich mit C++ angefangen hatte?) an und lese dazu.
    API und Graphik sind übrigens nicht unbedingt zweierlei Dinge. Schau dir da zum Beispiel die WinAPI an. Die Kapselt ja wohl die Graphik in ihrer API. Und um solche Dinge geht es mir. Für die anderen Dinge was die API kann, habe ich schon einiges gefunden, aber halt so gut wie nix, was die Graphik betrifft.

    Ich bin momentan auf der Suche, nach Informationen und Büchern, "wie man eine API erstellt". Aber eben eine, die auf keine andere angewiesen ist.

    @Blue-Tiger,
    Du triffst den Nagel auf den Kopf (der arme Nagel).
    Danke für den Link, ich werde mal schauen, ob ich so zu mehr Infos kommen kann.

    Grüssli



  • Artchi schrieb:

    Also mach dich gefälligst nicht über uns lustig, wenn du es nicht mal schaffst per google ein paar Infos zu finden, wenn zu Non-Internetzeiten die Leute ganze Computer in Assembler programmiert haben.

    Dem schliess ich mich an.

    Der OP lernt offenbar gerade erst C++; weiss offenbar noch nicht genau was ein API eigentlich ist; kann offenbar keinen Thread-Titel formulieren und reagiert auch noch zynisch wenn man versucht Informationen in für ihn verständlicher Form zu präsentieren.

    Meinen technischen Beitrag habe ich auf Null-Länge gekürzt; Hinweise ohne enzyklopädische Breite sind ja dem OP offenbar nicht hilfreich.

    Grüsse

    *this


  • Administrator

    Also jetzt geht es mir etwas zu weit!

    @Gast++,
    Ich habe nirgends etwas gegen irgendeinen von euch geschrieben. Ich habe nur ein, zwei etwas nicht so ernst zu nehmende Bemerkungen gemacht und sie sogar mit einem Smile versehen!

    Ich nehme mal an, dass du dich zum Beispiel durch folgendes angestossen gefühlt hast:

    Irgendwie scheint mir, wenden alle die Bibliotheken an, aber keiner weiss so recht, was dahinter wirklich genau abläuft. bzw. wie sie aufgebaut sind. 😃

    Das war unteranderem auf den Satz zuvor bezogen, wo ich gesagt habe, dass ich jede Menge finde, wie man die APIs anwendet, aber nur sehr wenig bis nichts, wie sie aufgebaut sind, bzw. gebaut werden!
    Und wenn schon, wenn man sich durch sowas beleidigt fühlt, dann schein ich ja getroffen zu haben oder wie?

    Ich programmiere übrigens seit >3 Jahren C++ und verwende seit fast zu beginn die MFC und/oder WinAPI, programmiere nun auch seit bald >3/4 Jahren Java und habe noch andere Programmiersprachen gelernt, sowie APIs.

    Ich wäre übrigens angetan, wenn du mich nicht probieren würdest, als Anfänger zu behandeln, dann würdest vielleicht auch sinnvolle Informationen bringen, die mir auch helfen und nicht nur Dinge, wie sie in etwa sind. Anstatt sie so zu formulieren, damit du denkst, dass sie für mich verständlich sind, formuliere sie lieber so, wie sie sind!

    Wenn du was gegen den Threadtitel hast, dann sag das und gibt einen besseren Vorschlag. Kann sein, dass der Titel nicht der Beste ist, ich find ihn allerdings nicht ganz so schlecht. Aber nur schlecht reden ist einfach, wie gesagt, bring was besseres, ich bin gerne bereit den zu ändern!

    Also ehrlich, ich darf doch bitten! Das ist ja der reinste Kindergarten!
    Nächstes Mal schreib ich wohl besser im C++ Teil, dort scheint man mindestens ernst genommen zu werden, obwohl es wohl das falsche Forum ist!

    Grüssli 🙄



  • Im ganzen Thread wurden nur Dinge so gesagt, wie sie wirklich sind, aber du scheinst sie nie verstanden zu haben. Was du tun willst ist einfach ein Device-Treiber schreiben, damit du auf unterster Ebene Pixel setzen kannst. Weil damit hast du dann genau das, was dir moderne OS bieten: eine Zeichenflaeche und eine Moeglichkeit, drauf zu zeichnen. Und damit kannst du dann genau wie Qt, Swing etc. das machen, was alle Grafikbibliotheken machen: zeichnen.

    Du hast dich sehr lange sehr ungenau ausgedrueckt (z. B. verwendest du API, wenn du Bibliothek meinst). Ich z. B. bin immer noch nicht sicher, ob du jetzt wissen willst, wie du einzelne Pixel setzen kannst, ohne dabei auf die WinAPI zuzugreifen (dazu hast du ja hier im Thread sehr viele Tipps bekommen), oder ob du wissen willst, wie so eine Bibliothek intern aufgebaut ist. In diesem Fall hab ich gleich schon am Anfang drauf hingewiesen dass es genug (OpenSource!)-Bibliotheken gibt, die auch alles selber zeichnen. Du koenntest dir also jederzeit einfach deren Dokumentation anschauen und du wuesstest, wie sowas aufgebaut ist.
    Also sei bitte fair, lies dir deine Beitraege nochmal durch und ueberleg, ob wirklich alle anderen nur Mist gebaut haben, oder ob du selber schuld dran hast, dass dich niemand verstanden hat. 🙂

    Wenn du was gegen den Threadtitel hast, dann sag das und gibt einen besseren Vorschlag. Kann sein, dass der Titel nicht der Beste ist, ich find ihn allerdings nicht ganz so schlecht. Aber nur schlecht reden ist einfach, wie gesagt, bring was besseres, ich bin gerne bereit den zu ändern!

    "Wie schreibe ich meine eigene Grafik-Bibliothek, ohne auf OS-Funktionen zuzugreifen" oder "wie sind GUI-Bibliotheken intern aufgebaut", je nachdem was du jetzt eigentlich wirklich wissen wolltest.


  • Administrator

    Blue-Tiger schrieb:

    Im ganzen Thread wurden nur Dinge so gesagt, wie sie wirklich sind, aber du scheinst sie nie verstanden zu haben. Was du tun willst ist einfach ein Device-Treiber schreiben, damit du auf unterster Ebene Pixel setzen kannst.

    Also doch Treiber, darauf hatte mir zum Beispiel auch niemand mehr antwort gegeben. Dann ist der Graphikpart der WinAPI also über Treiber aufgebaut, bzw. verwendet die Treiber von zum Beispiel Nvidia, bei einer GeForce Karte? Also müsste man mit Nvidia in Kontakt treten, welche dann natürlich entsprechende Gelder verlangen, wenn man mit ihren Treibern arbeiten möchte?
    Das ich irgendwie die Bits&Bytes in den Puffern der Graphikkarte und co verändern gehen muss ist mir schon klar. Ich weiss auch, das man jedes Pixel entsprechend ändern muss, damit man eine entsprechende Farbe bekommt. Ich weiss auch wie man per C oder C++ Bits und Bytes ändern muss. Aber das wesentliche wurde meiner Meinung nach noch nicht gesagt, wo komme ich überhaupt an die Adresse des Puffers? Wie kann ich diesen überhaupt ändern/ansprechen?

    Blue-Tiger schrieb:

    (z. B. verwendest du API, wenn du Bibliothek meinst).

    Das könnte wohl auch daran liegen, dass ich unteranderem auch Geschichtsstudent bin. Bibliothek ist in der Geschichte, wenn man so will, die API in der Programmierung 😃

    Blue-Tiger schrieb:

    Ich z. B. bin immer noch nicht sicher, ob du jetzt wissen willst, wie du einzelne Pixel setzen kannst, ohne dabei auf die WinAPI zuzugreifen (dazu hast du ja hier im Thread sehr viele Tipps bekommen), oder ob du wissen willst, wie so eine Bibliothek intern aufgebaut ist. In diesem Fall hab ich gleich schon am Anfang drauf hingewiesen dass es genug (OpenSource!)-Bibliotheken gibt, die auch alles selber zeichnen. Du koenntest dir also jederzeit einfach deren Dokumentation anschauen und du wuesstest, wie sowas aufgebaut ist.

    Eigentlich beides, der Thread sollte aber mehr um den ersten Teil gehen.
    Ja, es gab ein paar hilfreiche Links und co. Aber ich wäre halt noch sehr an einem umfassenden Werk interessiert gewesen, als immer nur diese Häppchen. Ich bin womöglich etwas faul, aber wer ist das schon nicht? 🙂

    Blue-Tiger schrieb:

    Also sei bitte fair, lies dir deine Beitraege nochmal durch und ueberleg, ob wirklich alle anderen nur Mist gebaut haben, oder ob du selber schuld dran hast, dass dich niemand verstanden hat. 🙂

    Habe ich gesagt, dass alle anderen nur Mist gebaut haben? Ich fand das von Artchi schon etwas, naja, aber er hat dann nette Links gegeben und deshalb habe ich nix weiter gesagt. Er hat meine kleinen nichts aussagenden Bemerkungen womöglich ein wenig in den falschen Hals gekriegt. Das ist auch nicht weiter schlimm. Aber das von Gast++ fand ich einfach nur eine Frechheit sorry. Und dann das nacheditieren und rausnehmen des Beitrages, das ist doch wirklich wie Kindergarten. Also unter normalen Erwachsenen erwarte ich solches Verhalten wirklich nicht!

    Blue-Tiger schrieb:

    "Wie schreibe ich meine eigene Grafik-Bibliothek, ohne auf OS-Funktionen zuzugreifen" oder "wie sind GUI-Bibliotheken intern aufgebaut", je nachdem was du jetzt eigentlich wirklich wissen wolltest.

    Das erstere wäre wohl das richtigere. Aber ist das nicht ein wenig ein langer Titel? Zu lange Titel sind ja meistens auch nicht gern gesehen.

    Grüssli



  • Dravere schrieb:

    Blue-Tiger schrieb:

    Im ganzen Thread wurden nur Dinge so gesagt, wie sie wirklich sind, aber du scheinst sie nie verstanden zu haben. Was du tun willst ist einfach ein Device-Treiber schreiben, damit du auf unterster Ebene Pixel setzen kannst.

    Also doch Treiber, darauf hatte mir zum Beispiel auch niemand mehr antwort gegeben. Dann ist der Graphikpart der WinAPI also über Treiber aufgebaut, bzw. verwendet die Treiber von zum Beispiel Nvidia, bei einer GeForce Karte? Also müsste man mit Nvidia in Kontakt treten, welche dann natürlich entsprechende Gelder verlangen, wenn man mit ihren Treibern arbeiten möchte?

    Also zum Mitschreiben die Grafikkarte wird direkt über den Treiber angesteuert.Der Prgrammierer bekommt dann ne API zu hand die von der Hardware abstrahiert. Sonst könnten wir in den DOS-Zeiten bleiben und für jedes Grät eigene Routine ausliefern. Wenn du nun drawline(blbla) aufrüfst wird der Befehlen an den Treiber deligiert und der setzt es dann um. Grafiklibs bauen auf die API auf und sind dann halt speziell auf Grafikverarbeitung ausgelegt. Beispielsweise graphics32 für Delphi, ....


Anmelden zum Antworten