Software Renderer mit X11

  • Ersteller LastManStanding
  • Erstellt am
L

LastManStanding

Hallo allerseits!

Bevors zum eigentlichen Problem geht hier eine kleine Vorgeschichte:

Ich schreibe zurzeit einen Software Renderer fuer Linux namens: "Linux Free Software Renderer" kurz FreeSR. Das meiste klappt auch ganz gut. Die grundlegenden Mathematik Sachen wie: Matrizen, Vetoren und Ebenen stehen schon. Ich kann schon Wireframed Objecte Zeichnen und ich bin schon fast mit der Arbeit an einem sehr robusten Format für meine 3D Modelle fertig. (Sobald etwas mehr steht stell ich eine Homepage online die ich dann hier poste)

Nun aber zu meinem Problem:
Das ganze System baut auf der XLib und dem X11 Server auf. Also unterste Ebene. Nach dem die Geometry durch die selbst gebaute 3D Render Pipeline ist wird die Grafik mit nem Bresenham Algorythmus auf das XWindow gezeichnet (->noch Wireframed). Wie man sich vorstellen kann ist das ergebnis mehr als sperrlich, da ein BackBuffer fehlt. Darauf hab ich versucht einen Backbuffer zu programmieren in dem ich:

1.) Auf ein zweites Window rendere und dann kopiere.

2.) Auf ein Pixmap rendere und dann kopiere

Beide Methoden liefern ausgezeichnete Bildqualität, allerdings nur solange der Backbuffer direkt am Screen sichtbar ist. Nimmt man das zweite Window (oder Pixmap) das man als Backbuffer verwendet und überdeckt es oder schiebt es am Rand raus, so wird darauf nicht gerendert und der Inhalt wird somit auch nicht auf den FrontBuffer kopiert. Das selbe gilt natürlich auch dann wenn ich es gar nicht erst anzeige (was ja eigentlich die Voraussetzung fuer den Backbuffer waere).
Darauf hab ich kurzerhand beschlossen selbst einen Speicher zu reservieren und diesen also Backbuffer zu verwenden. Wenn ich nun aber das Bild auf den Frontbuffer uebertrage, dann sieht das Ergebnis gleich aus, da ich über die Zeichenfunktion der XLib zeichnen muss.

Die XLib ist sehr sperrlich Dokumentiert, und auch die man-pages geben nicht viel her, daher lautet meine Frage:
Kennt jemand von euch eine Moeglichkeit entweder: mit der XLib auf ein unsichtbares Window oder Pixmap zu render, oder irgendwie an den speicher des frontbuffers zu kommen, damit ich direkt kopieren koennte?

Ich weiss, dass dieses Forum nicht gerade auf Unix bezogen ist (zumindest nicht auf dieser Ebene) aber vielleicht kann mir der eine oder andere doch helfen.

mfg LastManStanding
 
Zurück
Oben