Win32 GDI zusammen mit OpenGL nutzen


  • Mod

    Es flackert weil vermutlich in WM_ERASEBKGND der Hintergrund gelöscht wird...

    Wenn Du das gesamte Fenster zeichnest solltest Du in WM_ERASEBKGND nichts machn und direkt returnieren.



  • Einfach nein. Totaler Stuss. Niemals 2 GUIs benützen. Was denkt ihr euch dabei.
    @Themenstarter: Entscheide dich für eine der beiden Komponenten und höre nicht auf diese Leute hier 😛


  • Mod

    Und warum soll man es nicht?
    Für manches macht es Sinn und es geht. Es gibt genug Samples und wenn man existierenden Code integrieren muss...

    http://msdn2.microsoft.com/en-us/library/ms537714(VS.85).aspx



  • msdn schrieb:

    OpenGL and GDI graphics cannot be mixed in a double-buffered window.
    An application can directly draw both OpenGL graphics and GDI graphics into a single-buffered window, but not into a double-buffered window.

    http://msdn2.microsoft.com/en-us/library/ms537543(VS.85).aspx

    Das SwapBuffers() wird dir ohnehin das gerade vorher gezeichnete Rectangle töten 😉



  • Natürlich klingt das etwas merkwürdig wenn man zwei GUIs mischt, aber wie sollte man mit OpenGL eine schnelle Funktion wie 'FloodFill()' programmieren? Wenn man sowieso die Win32API (CreateWindow, TranslateMessage usw.) verwendet, warum sollte man dann nicht auch Funktionen wie eben 'FloodFill' oder 'Chord' benutzen?



  • Ich habs mal ausprobiert, aber 'geeky' hat leider Recht. SwapBuffer löscht den alten Bildschirm sowieso. Das Flackern ist zwar nur noch sehr schwach aber es reicht leider nicht 😞

    Ich weiß einfach nicht wie ich mit OpenGL alleine kompliziert und vor allem langsame Algorithmen programmieren soll.
    Ich fürchte das selbst die GL-UtilityToolkits dafür nicht ausreichen, oder?! 😕

    (Ich frag da noch mal im Spiele-Programmieren-Forum nach)



  • LukasBanana schrieb:

    Natürlich klingt das etwas merkwürdig wenn man zwei GUIs mischt,

    weder gdi noch opengl sind GUIs.

    aber wie sollte man mit OpenGL eine schnelle Funktion wie 'FloodFill()' programmieren?

    opengl ist für die darstellung von grafiken zuständig und nicht für deren erzeugung. wenn du ein floodfill auf pixelebene brauchst, musst du es selbst programmieren.

    Wenn man sowieso die Win32API (CreateWindow, TranslateMessage usw.) verwendet, warum sollte man dann nicht auch Funktionen wie eben 'FloodFill' oder 'Chord' benutzen?

    weil der device-context nach der initialisierung opengl "gehört".

    eine saubere lösung wäre es, mit gdi in einen offscreen-buffer zu malen und den inhalt des buffers mit opengl in den backbuffer zu blitten. also den gdi-buffer in eine textur kopieren und diese textur auf einem fullscreen-quad rendern.



  • Gute Idee, jetzt müsste ich nur noch wissen wie man mit OpenGL auf eine Texture rendert. Bzw. mit der WinAPI



  • LukasBanana schrieb:

    Gute Idee, jetzt müsste ich nur noch wissen wie man mit OpenGL auf eine Texture rendert. Bzw. mit der WinAPI

    dazu gibt es 2 möglichkeiten:

    1. du suchst dir diese informationen selbst zusammen, z.b. indem du tutorials und dokumentationen liest.
    2. du bettelst in foren rum, bis dir jemand eine fertige lösung vorkaut.

    ersteres ist zwar nicht mehr modern, aber sehr effektiv.



  • Ich glaub ich nehm Nummer 3 :p


Anmelden zum Antworten