SoftwareRendering - Aufbau und Struktur?



  • Hallo,

    ich habe inzwischen schon einiges in OpenGL an Grafik programmiert, nun möchte ich aber mal mit einem eigenem kleinen SoftwareRenderer anfangen.

    Ich habe sowas schon mal in PureBasic gemacht in dem ich komplette Szene selbst geplottet habe.

    Ich brauche also eigentlich nur Hilfe dazu, wie man damit anfägt, also einen leeren schwarzen Bildschirm ohne OpenGL oder DirectX zu verwenden.
    Zum Beispiel muss man in OpenGL unter Windows mittels "ChoosePixelFormat" angeben, das man auf das Fenster selbst zeichnen möchte und das mit OpenGL.
    Die Werte heißen dann eben "PFD_DRAW_TO_WINDOW", "PFD_SUPPORT_OPENGL" und "PFD_DOUBLEBUFFER"
    Was muss ich angeben um selbst jeden Pixel zu plotten? Macht man das unter Windows mit "BitBlt" oder der GDI?!


  • Mod

    schau dir den http://www.pixeltoaster.com/ source an, oder benutze es gleich 😉

    die ausgabe ist normalerweise nicht so wichtig fuer einen software renderer.
    mach dir ne klasse "screen" (oder sowas) die die groesse weiss (also breite und hoehe) und das array mit den pixeln enthaellt und zeichne da rein.

    am ende musst du es dann auf der jeweiligen plattform ausgeben, mit opengl,d3d,gdi,xwindow etc.



  • LukasBanana schrieb:

    Macht man das unter Windows mit "BitBlt" oder der GDI?!

    BitBlt ist teil der GDI. Und ja, das ist eine Möglichkeit. Deinen Framebuffer kannst du mit Hilfe der alten CreateDIBSection API erzeugen und dann per BitBlt auf dein Fenster bringen.
    Für Vollbild kannst du DirectDraw verwenden.



  • Wenn Du Dich mit OpenGL schon etwas auskennst, kannst Du auch das benutzen um Deinen "Pixel-Buffer" als Textur zur Grafikkarte zu schicken und (als texturiertes Polygon) auf Fenstergroesse zu strecken.



  • oder benutz SDL oder SFML um den pixelbuffer anzuzeigen. duerfte einer der simpelsten methoden sein.



  • Ich hab's jetzt erst mal mit OpenGL gemacht - also die letzte Renderoperation (auf Texture 'gesoftwaret' und dann die Texture 'gerendert').

    Aber später sollte man natürlich in einem solchen Fall auf OpenGL verzichten wenn man einen eigenen SoftwareRenderer schreiben will 🙂



  • Ganz auf 'dritt'-APIs wirst du nicht verzichten können.



  • Nagut, wenn ihr die WinGDI als dritt-API bezeichnet dann natürlich


Anmelden zum Antworten