Gibt es eine absolut primitive Grafikbibliothek die einzelne Pixel in ein Fenster zeichnet und crossplattform fähig ist?
-
EDIT: In der Zeit in der ich den Beitrag hier mir aus dem Ärmel gezogen hab, habt ihr in zwei kurzen Beiträgen die Lösung schon geschrieben
Ich glaube er will sowas wie einen Software-Renderer schreiben, auch wenn es mit Sicherheit interessant ist, stellt sich mir weiterhin die Frage: Warum??
Aber um mal kurz auf dein Problem einzugehen:
Ich hab mich zwar noch nie mit dem Thema auseinandergesetzt, aber an deine Stelle würde ich einfach ein 2D Array mit RGB werten nehmen und als "Rendertarget" benutzen. Du kannst ziemlich einfach auf jeden Wert zugreifen und wenn du fertig mit "zeichnen" bist, dein 2D Array mithilfe von OS-spezifischen Funktionen (eine kurze suche im Internet hat mir für Windows CreateBitmap geliefert) als Bild interpretieren lassen und dann auf dein Fenster zeichnen lassen. Der Plattformspezifische Code hat für jedes OS vielleicht 200 - 300 Zeilen, der Softwarerenderer dürfte dagegen je nachdem wie umfangreich du ihn machst mehrere Tausend haben (eher mehr). Wenn der Plattformspezifische Code für jedes Betriebssystem gut abstrahiert ist, hast du zum Schluss ein Code für mehrere Betriebssysteme und musst nur noch beim Kompilieren dein Ziel OS kennen.Ich würd an deine Stelle einfach DirectX oder OpenGL nehmen, beides ist Low-Level und nutzt die Hardware ==> deutlich schneller.
floorball
-
-
dot schrieb:
Danke für den Hinweis.
Leider ist diese Lib für C++, ich bräuchte eine die auch mit C funktioniert.
Aber der Link hat mir trotzdem geholfen, denn TinyPTC scheint dies zu bieten und ist im Gegensatz zu OpenPTC auch für Mac OS X verfügbar:http://sourceforge.net/projects/tinyptc/
Die einzige Frage ist jetzt nur noch, wie gut TinyPTC supported wird?
Kann man sich bei dieser darauf verlassen, dass man die auch noch in 15 Jahren für moderne OS nutzen kann?
Also gegebenfalls auch dann noch Anpassungen vorgenommen werden, wenn die alte Version nicht mehr unter Windows 8+n oder sonst ein bis dahin gut genutztes OS läuft?@floorball
Ja, ein SW Renderer.
OpenGL wäre zwar praktibal, aber bietet leider halt auch wieder das Problem, dass man OpenGL spezifische Funktionen nutzen kann, um auch so eine gegeben Aufgabe umzusetzen.
-
Hm, die TinyPTC Lib gefällt mir, im Prinzip hat die nur drei Funktionen, damit ist sie sehr überschaubar.
Was noch fehlt ist eine plattformunabhängige Tastatureingabe.Die muss ich dann wohl selbst schreiben, allerdings habe ich kein MacOS X und könnte das zumindest darauf nicht testen.
OpenPTC bietet zwar Support für eine Tastatureingabe an, aber der Code ist teilweise in C++ geschrieben und einen Port für Mac OS X gibt es dort auch nicht.
Gibt es noch weitere Alternativen?
-
Primitivus schrieb:
Die einzige Frage ist jetzt nur noch, wie gut TinyPTC supported wird?
Kann man sich bei dieser darauf verlassen, dass man die auch noch in 15 Jahren für moderne OS nutzen kann?
Also gegebenfalls auch dann noch Anpassungen vorgenommen werden, wenn die alte Version nicht mehr unter Windows 8+n oder sonst ein bis dahin gut genutztes OS läuft?Ist doch vollkommen Schnuppe wenn's nur um ein Spassprojekt/Lernprojekt geht.
Oder hab ich dein "geht nur um Learning by Doing" falsch verstanden?Ich hoffe nur du schreibst nicht mit "Learning by Doing" Software auf die irgendjemand angewiesen ist...
ps: Und nachdem das Übertragen einer "Memory Bitmap" auf den Bildschirm echt keine Herausforderung ist, ist es auch vollkommen egal wie lange das Ding supported wird. Notfalls schreibst du die 3 1/2 Zeilen Code pro Plattform halt selbst.
-
Meinst nicht, dass Steuersoftware für Atomkraftwerke auch in Learning by doing Manier von Praktikanten geschrieben wird?
-
Nein.
-
Nimm SDL 2. Das ist eine simple Grafik Bibliothek speziell für 2D und ist crossplattform tauglich.
Das ist zwar auch C++, aber C++ ist eh C mit ein paar mehr Spielereien. Damit kannst du ganz simpel Pixel irgendwo hinzeichnen oder auch schwerere Sachen mit machen.
Ist außerdem sehr gut dokumentiert, finde ich:
http://wiki.libsdl.org/FrontPageDa kann man schön Funktionen suchen und auch verwandte Funktionen durchstöbern.
Gibt außerdem einige SDL2 Tutorials mittlerweile auf youtube oder im Netz.
-
PadMad schrieb:
Nimm SDL 2. Das ist eine simple Grafik Bibliothek speziell für 2D und ist crossplattform tauglich.
Das ist zwar auch C++, aber C++ ist eh C mit ein paar mehr Spielereien. Damit kannst du ganz simpel Pixel irgendwo hinzeichnen oder auch schwerere Sachen mit machen.
Ist außerdem sehr gut dokumentiert, finde ich:
http://wiki.libsdl.org/FrontPageDa kann man schön Funktionen suchen und auch verwandte Funktionen durchstöbern.
Gibt außerdem einige SDL2 Tutorials mittlerweile auf youtube oder im Netz.SDL & SDL2 sind in C geschrieben.
-
Ich würde die SDL nehmen, auch wenn du den Löwenanteil nicht nutzt. Einen Software-Renderer zu schreiben halte ich für absolutes Pflichtprogramm wenn ernsthaft was mit 3D-Grafik machen will. Denn hier lernst du wirklich was von vorne bis hinten nötig ist um 3D auf dem Bildschirm zu zaubern.
Ein Dreieck wird eben nicht automatisch wie durch Zauberhand gezeichnet, da muss man sich schon einige Gedanken machen um das effektiv umzusetzen. Hinterher hast du ein umfassendes Verständnis was in deiner Grafikkarte abgeht und darfst dann auch gerne High-Level coden indem du OpenGL nimmst.