In wxWidgets GUI OpenGL-Fenster integrieren



  • ok, ich bin nen schritt weiter gekommen, hab mir nun ne klasse von wxGLCanvas abgeleitet, jetzt bekomme ich aber vom linker folgende meldungen

    obj\Release\main.o:main.cpp:(.text+0xba4)||undefined reference to \_\_imp\_\_\_ZN10wxGLCanvasC2EP8wxWindowiPiRK7wxPointRK6wxSizelRK8wxStringRK9wxPalette'| obj\\Release\\main.o:main.cpp:(.text+0xbf2)||undefined reference to__imp___ZN11wxGLContextC1EP10wxGLCanvasPKS_'|
    obj\Release\main.o:main.cpp:(.text+0xc5e)||undefined reference to \_\_imp\_\_\_ZN10wxGLCanvasD2Ev'| obj\\Release\\main.o:main.cpp:(.text+0xee8)||undefined reference to__imp___ZNK10wxGLCanvas10SetCurrentERK11wxGLContext'|
    obj\Release\main.o:main.cpp:(.text+0x1154)||undefined reference to \_\_imp\_\_\_ZN10wxGLCanvasC2EP8wxWindowiPiRK7wxPointRK6wxSizelRK8wxStringRK9wxPalette'| obj\\Release\\main.o:main.cpp:(.text+0x119b)||undefined reference to__imp___ZN11wxGLContextC1EP10wxGLCanvasPKS_'|
    obj\Release\main.o:main.cpp:(.text+0x120e)||undefined reference to \_\_imp\_\_\_ZN10wxGLCanvasD2Ev'| obj\\Release\\main.o:main.cpp:(.text+0x185a)||undefined reference to__imp___ZN10wxGLCanvas11SwapBuffersEv'|
    obj\Release\main.o:main.cpp:(.text+0x1992)||undefined reference to \_\_imp\_\_\_ZN10wxGLCanvas13sm_eventTableE'| obj\\Release\\main.o:main.cpp:(.rdata$_ZTV8GLCanvas[vtable for GLCanvas]+0x8)||undefined reference towxGLCanvas::GetClassInfo() const'|
    obj\Release\main.o:main.cpp:(.text\_ZN8GLCanvasD1Ev[GLCanvas::~GLCanvas()]+0x14)||undefined reference to `\_\_imp___ZN10wxGLCanvasD2Ev'| obj\\Release\\main.o:main.cpp:(.text_ZN8GLCanvasD0Ev[GLCanvas::~GLCanvas()]+0x15)||undefined reference to `__imp___ZN10wxGLCanvasD2Ev'|
    ||=== Build finished: 12 errors, 0 warnings ===|

    Wie oben schon erwähnt, ich arbeite erst seit kurzem mit wx bzw codeblocks. Ich hoffe ihr könnt mit den fehlern was anfangen



  • Weißt du denn, was undefined reference to ... bedeutet? Dann wirst du auch das Problem beheben können. 😃

    Und zus. als Tip:
    http://docs.wxwidgets.org/stable/wx_librarieslist.html#librarieslist

    Falls du nicht weiter kommst, nochmal melden. 🙂



  • Bitte wxWidgets neu kompiliren und WX_USE_OPENGL aktivieren (oder so ähnlich, bin noch arbyten) in der Setup.h bzw unter MinGW oder Linux mit --with-opengl kompilieren.
    http://www.wxwidgets.org/docs/tutorials/opengl.htm



  • ok, ich muss mich leider schon wieder melden.
    ich hab wx als monolithic gebaut, hatte gedacht da wäre dann alles dabei

    nun mein neues problem: wie kann ich diese wxGL libraray bauen, bzw wo müsste sich diese befinden, wenn ich wx bereits mit WXUSE_GLCANVAS = 1 in der setup.h (include/wx/msw) compiliert habe?



  • Ok, dann such mal bitte im Output Ordner von wx nach der wxGL-gcc-custom.lib und link gegen diese.
    rya.



  • ok, also ich glaub irgendwas hab ich verbockt.

    in meinem lib/gcc_dll befindet sich nur eine datei mit dem namen 'wxmsw28u_gl_gcc_custom.dll'

    kann sich jemand erklären, was ich falsch gemacht hab? ist für mich echt das erste mal, dass ich mich mit sowas beschäftige, also sorry für meine blöden fragen



  • Wenn da keine .lib ist, dann hast du sie entweder übersehen oder gelöscht. Ansonsten bitte halt nochmal neu kompilieren bzw linken, dann wird die Lib wieder erstellt. Sollte dann 'libwxmsw28u_gl_gcc_custom.a' heissen, wenn du MinGW (Codeblocks Standard) benutzt.
    rya.



  • juhu, das hab ich nun endlich geschafft, die lib hieß bei mir jedoch 'libwxmsw28u_gl.a'

    nun steck ich aber schon wieder ne stunde am nächsten problem und zwar möchte ich das canvas (wxGLCanvas) nicht über die ganze Form haben, sondern nur ein kleines Fenster...
    wie kann ich das einstellen?

    ich versprech euch auch, dass ich dann erst mal glücklich bin 😉



  • Naja, generell musst du nur das Fenster auf einem wxPanel erstellen. Das muss dann nur die Größe haben die du möchtest und auf dem Hauptfenster positioniert werden ( am besten mit wxSizer ). Wenn du eine mehrspaltige Ansicht haben möchtest, dann schau dir mal das AUI Sample an oder das wxSash-Sample.
    Die Samples liefern viele gute Anwendungsbeispiele.
    rya.



  • Um jetzt nicht unnoetig einen neuen Thread zu eroeffnen: Ich hab mir jetzt mal das Beispiel auf dem wxwiki zum Thema glcanvas angesehn und versucht das GL-Fenster in ein mit Code::Blocks und wxSmith gebasteltest Fenster einzubauen. Jetzt habe ich aber 2 Probleme.

    Erstens: Wenn ich wxPaintDC verwende, wird das Fenster zwar richtig eingebunden, aber natuerlich updated es nur bei einem Paint-Event, in diesem Fall vermutlich Refresh() wenn ich die Fenstergroesse aendere. Damit das auch ausserhalb von Paint-Events funktioniert, sollte ja wxClientDC verwendet werden. Jetzt ist es allerdings so, dass die ganzen StaticText- und Text-Felder grau uebermalt werden und zusaetzlich alle Messageboxen und Dropdown-Menues. Wenn ich auf schliessen klicke (x), dann beendet sich das Programm erst, nachdem ich es minimiere. Warum passiert das und wie kann man das Problem loesen?

    Zweitens: Es wird zwar der Hintergrund des OGL-Fensters immer brav gecleared, aber die Geometry (in dem Fall ein blaues Teapot Drahtmodell von GLUT) taucht nicht auf. Die Render-Funktion sieht atm so aus:

    glLoadIdentity();
        prepare3DViewport(getWidth(), 0, getWidth(), getHeight());
    
        glColor4f(0, 0, 1, 1);
        glTranslatef(0, 0, -5);
        glutWireTeapot(1.0);
    

    Haengt das mit Problem1 zusammen?

    Das Example findet sich auf wiki.wxwidgets.org.


Anmelden zum Antworten