Beiträge von Spite82

    Ok, so ganz wars das dann doch noch nicht :(
    Der Fehler scheint mal behoben zu sein, allerdings bekomme ich bei der Displaylisten-Erstellung noch immer eine Invalid Operation.

    Jetzt kommts:
    Wenn ich Straßen erstellt habe (darum gehts in meinem Prog ;) ), dann ist alles ok, wenn ich allerdings im User Interface auf einen anderen Button klicke, der bewirkt, daß ich noch andere Berechnungen durchgeführt werden, dann sieht das bei mir so aus:
    GUI->GUIAppBridge->App(Berechnungen) - so wird der Buttonklick weitergeleitet.
    Wenn ich jetzt allerdings in meiner App gleich an die erste Code-Zeile wieder so ein glGetError hänge, gibt er mir wieder "Invalid operation" zurück????? Dabei ist noch gar nichts passiert........

    Was kann das sein??

    Lg
    Spite

    Lol sorry, aber es ist ja nicht das erste mal so:

    Da hat man ein Problem, schreibts rein, sucht weiter, und schwupps findet man den Fehler ;)

    Es lag an den glIneWidth-Befehlen, die sind anscheinend nicht erlaubt innerhalb von glBegin und glEnd, sorry, kann gelöscht werden ;)

    Lg
    Spite

    Hallo an alle, die sich mit Opengl auskennen ;)

    Ich schreibe gerade an einem Programm, welches ein GUI besitzt (Winforms).
    Dabei gibt es ein Panel, in welches mittels OpenGL hineingerendert wird, alles optimal soweit. Nur bin ich gerade auf einen Fehler draufgekommen.

    Ich wollte mit Displaylisten generieren lassen, habe aber immer einen "Invalid operation"-Fehler bekommen.

    Nachdem ich jetzt einige Zeit herumgesucht habe, bin ich zum Folgenden Code-Punkt gekommen:

    (die letzte Codezeile ist eigentlich sinnlos ;) - nur für den Haltepunkt in VS 2005).

    Immer nach dem glEnd(); wird glGetError geworfen (alle anderen Positionen hab ich schon durchprobiert, der Fehler passiert immer nach dem glEnd();

    Zuerst dachte ich, es läge vielleicht an den Zugriffen auf "network->kreuzungen[network->strassen[i].startcross].x" usw. (weil es ja mehrere Threads gibt, ein anderer für den dortigen Vektoren Daten hinzu, und ein anderer (von dem der Code ist) rendert das dann), aber wie gesagt, der Fehler passiert immer NACH glEnd();....

    Falls wer eine Idee hat, wäre cool von euch, wenn ihr es reinschreibt ;)

    Lg
    Spite

    Nö, sowas find i nit :(
    Wo soll des sein?

    Lg
    Spite

    PS: Prozessor-Count lies ich im GUI-aus, in dem dann die Threads gestartet werden. (.Net -> System::Environment::ProcessorCount::get() - so in etwa müssts heißen)

    Danke Ringding und Wolfibolfi!!

    Jetzt gehts ;)
    Hab eben das erste mal Thread und c++ zu tun, daher wusste ich nicht wie man das anstellt, aber jetzt funzts!
    Find ich echt sehr cool: hab jetzt eben einen Algo, der je nach ProzessorCount eine beliebige Anzahl von Threads startet, die die Berechnungen machen - optimal.
    Jetzt kann ich dann endlich weitermachen :)

    Lg
    Spite

    Ah ok, das klingt auch irgendwie logisch ;)
    Wenn ich allerdings meine CriticalSection beim Programmstart erzeuge (InitializeCriticalSection) kann ich dann trotzdem nur für den einen Befehl das Enter und Leave machen oder versteh ich das wieder falsch? Ich werd mal so probiern, daß die CriticalSection gleich initialisiert wird beim erstellen des Objektes und einfach Destroyed wird beim Beenden des Programms.

    Lg
    Spite

    Habs mit einer Critical Section probiert (global):
    Initialisiert, dann Enter, dann der Methodenaufruf, dann Leave und zum Schluss Destroy - funktioniert trotzdem leider nicht....

    Anscheinend kriegt er sich in die Haare beim löschen eines Structs, das eben dem Vektor hinzugefügt wird und danach die Methode fertig abgearbeitet ist (also das Struct gelöscht wird)

    Geh ich e recht in der Annahme, daß:
    * lokale Variablen zB 2mal existieren, wenn eine Methode von 2 Threads aufgerufen wird
    * globale Variablen nur einmal existieren, egal wie viele Threads darauf zugreifen

    Was mich wundert ist:
    Ich habe ein GUI (natürlich einn Thread) der startet einen 2. Thread, der Berechnungen macht. Im GUI-Thread sieht man aber auch die Ergebnisse des 2.Threads, daher greift der GUI-Thread auch auf die globalen Variablen zu (die der Berechnungs-Thread bearbeitet).... so komm ich zumindest zu meinen Annahmen von oben ;). Also GUI_Thread und ein Backgroundworker funktioniert hier, allerdings GUI und 2 Backgroundworker - da gibts eben die Probleme....
    Im ersten Fall fügt nur ein Backgroundworker vector-Elemente hinzu, im 2.Fall machen das beide Backgroundworker, das ist der einzige Unterschied, den ich erkennen kann....

    Vielleicht gibts noch was, was ich nicht berücksichtigt habe?

    Lg
    Spite

    Ja danke werd mir das mal anschaun.
    Wieso gibts eigentlich diesen Error, ich mach ja eigentlich mit dem vector nur ein Push, oder reicht das schon?

    Lg
    Spite

    Hallo an alle Chief-Checker,

    ich habe ein Problem mit Threads und c++/.net

    Ich habe ein c++ Programm als lib compiliert, und daraus werden dann Methoden aus einer Winforms-GUI-Anwendung aufgerufen.
    Ich hoffe soweit ist alles klar.

    Ich versuche jetzt in meinem GUI-Teil des Projekts mehrere BackgroundWorker zu starten, was anscheinend auch funktioniert (denn wenn ich mit Haltepunkten durchgehe, sehe ich, das ich in meiner "DoWork" Methode 2 mal drinnen bin....

    Jetzt das eigetntliche Problem:
    meine DoWork ruft immer die gleiche Methode aus der lib auf (also asynchron 2mal)
    In dieser Methode wird zu einem vector<myStruct> xyz jeweils ein Element gepusht.
    An dem Zeitpunkt, an dem der 2. Thread startet bekomme ich irgendwelche Errors, und ich denke das liegt an ebendiesem Push, wie kann man das machen, daß 2Threads Elemente zum selben vector hinzufügen können, ohne Errors zu bekommen??

    Wär cool, wenn jemand was weiss


    Lg
    Spite

    Ok, durch public machen einer Methode, sowie des Vectors, der die Strassen enthält konnte ich die Schleife in die Form1.h bringen, da wirs dann einfach nach jedem x-ten Schritt das Label upgedated (geht sicher auch schöner... aber es passt mal so) :)

    Lg
    Spite

    Ja ich weiß nur nicht, wie ich aus so einer Struktur:
    Form1 -> GUIAppBridge -> | -> MainApp -> StreetNetwork (hier steht dann der Vec)
    dann vom StreetNetwork (wo dann alle Berechnungen laufen) aus irgendwie mein Form1 dazu bringe ein Label anders zu benennen (das mit den Zeitabständen wär ja erstmal egal.......).

    Sprich mein GUI ist in der Form1, darin habe ich sowas: GUIAppBridge* guiAppBridge, dort wiederum habe ich eine MainApp * application, und dort wieder habe ich ein StreetNetwork *network.....

    Ist das grauslig?
    Weil ich dachte, so wäre alles schön getrennt.... (auch die 2 Teile des Programms (MainApp, sowie StreetNetwork sind ein Programm als lib compiliert, und in Abhängigkeit dazu dann die Form1 und GUIAppBridge)
    Ich hoffe man kann verstehen was ich meine ;)......

    Lg
    Spite

    edit:
    wenn ich mein Label aus Form1 in einen namespace schmeiss mit einer methode zum updaten und ich die Form1 in in meine StreetNetwork include glaubst du würde das dann funktionieren?
    Möglich wärs, oder ehen nicht (zB weil das dann ja eine Lib wird oder so, kenn mich da nicht aus, ich denke ich werd mal probiern....
    wobei ich dann keine Ahnung hätte, wie ich mein Label in einen Namespace bekomme..... :(

    Ja sowas habe ich mir auch schon gedacht, aber wie würde ich sowas angehen, denn von meiner Schleife aus habe ich ja keinerlei Kontrolle über das Label des GUI, oder?
    Ich verwende eine "Bridge" zwischen den 2 Projekten GUI und App, also wird das nicht gehen oder??

    Ein Thread wäre cool, das wollte ich mir sowieso shcon mal anschauen, kenn mich da nicht aus.....
    Kann denn ein Thread auf zB die länge eines Vectors zugreifen und dann im GUI das Label anders benennen??
    Wäre cool, wenn du mir dazu was schreiben könntest ;)

    Danke einstweilen samyjr!!

    Lg
    Spite

    eventuell gibts da auch eine recht einfache c++ Lösung, aber soooo ein Profi bin i jetzt a wieder nit :)

    Hab shcon alles geregelt, funktioniert jetzt optimal, gleich schnell wie vorher ohne GUI :).

    Aber eine Frage habe ich noch.
    Ich habe meinen Button, der das Strassennetzwerk berechnen lässt.
    Je nach eingestellter Landschaftsgröße kann das schon mal 30Sek. oder so dauern, also dachte ich ich füge sowas wie eine Info ein, wieviele Strassen gerade existieren, upgedatet ca. jede Sekunde.

    Wie kann ich jetzt sozusagen von "außen" den Text eines Labels ändern?
    Ich dachte auch schon an einen timer, der jede Sekunde mal die Größe des Vektors abruft in dem die Strassen gespeichert sind, aber das wird wahrscheinlich nix, weil ja da gerade die Berechnungen laufen oder?

    Wie macht man sowas, während eine Berechnung läuft? Oder muss ich da immer wieder mal die Berechnung abstoppen, die Anzahl ausgeben und dann die Berechnung fortführen???

    Irgendeine Idee?

    Lg
    Spite

    Hallo Grassi, danke erst mal für den Link, hab die Seite shcon mal gesehen, aber anscheinend nicht so richtig angeschaut :)

    Werde mir mal ansehen, ob das eventuell leichter ist, oder ob ich doch bei den Winforms bleibe....
    Die Namespaces waren eigentlich nur dazu da, einmal "schnell" etwas in das Panel rendern zu können.

    Wenn ich alles tatsächlich einbaue, werde ich wohl noch einiges an der Struktur meines Progs ändern müssen (ist zZ eigenlich alles in einer langen cpp Datei drinnen, aber da wollte ich sowieso noch ändern....

    Also ich werde mir das mal ansehen, danke

    Lg
    Spite

    Ja ich habe es zwar schon mal geschafft das zu beseitigen, ich hab zZ allerdings ziemliche Performance-Probleme.....

    Was ich machen will ist folgendes:
    Ich habe ein Programm (das muss ich sowieso ändern, wenn ichs ganz einbaue, ich weiß), das mir basierend auf ein paar Texturen (die zu laden dauert leider ewig zZ) ein Strassennetzwerk berechnet.

    Ok, wenn ich grösstenteils alles so belasse, wie ich mein Programm vorher ohne GUI hatte, dann habe ich nach der Erstellung nur noch ca. 2Fps bei ca. 30.000 Linien?? Woran liegt das?
    Wenn ich meine alte Version starte habe ich bei 1600x1200 und 180.000 Linien noch immer fast 30Fps.

    Hast du eine ahnung woran das liegen könnte.
    Ich habe zZ sowas:
    namespace StassenKreuzungen
    {
    vector<way>strassen;
    vector<cross>kreuzungen;
    }

    die Werte werden in einer StreetGen.cpp berechnet und in die Vektoren gespeichert.
    Beim rendern hab ich dann aus der OpenGLForm.cpp auch zugriff auf die Vektoren und kann sie zeichnen.

    Woran liegt das?
    Ich muss zugeben ich habe noch NIE ein GUI programmiert, also habe ich davon keine ahnung.
    (außerdem weiß ich nicht, oba man sowas überhaupt machen kann/sollte mit dem namespace, damit man auf Variablen zugreifen kann???)
    Vielleicht liegts auch am timer, der alle 10ms den Render-Befehl gibt....

    Lg
    Spite

    Ok, ich habe mal gefunden wonach ich gesucht habe, ich schaffe es jetzt lt. einem Beispiel von TheCodeProject ein Opengl-Window zeichnen lassen kann.

    Ich habs jetzt so modifiziert, dass ich das Opengl-Window jetzt auch in ein beliebiges Panel werfen kann.

    Eine Frage dazu:
    Wie resize ich meine opengl-view jetzt?
    Welches Event ist dafür zuständig??

    edit:
    hat sich erledigt

    Lg
    Spite

    Ja die Seite kenne ich natürlich ;).
    Wo gibts da was, das mit GUI Programmierung zu tun hat? (Ich find zumindest auf die Schnelle nur den MFC-Basecode, werde mir den mal anschauen ;)...

    Danke auf jeden Fall mal!!

    Lg
    Spite

    Hallo, ich habe jetzt schon 3 Tage oder so im Internet herumgesucht, wie man OpenGL (Glut) in ein Programm einbettet, welches mit Winforms ein GUI bereitstellt (c++).....

    Habe es shcon mit Qt (Opensource) versucht, da konnte ich beim Installieren allerdings das hier nicht machen: configure -platform win32-msvc2005 ("win32-msvc2005" wurde nicht erkannt - ich denke weil die MSVC-unterstützung in der OpenSource version fehlt).....(ansonsten wäre dies glaube ich das Optimale....
    Dann habe ich es mit MFC probiert, aber bin da leider auch nicht sehr weit gekommen.....
    Außerdem wollte ich es mit Glow versuchen, das gab allerdings ein paar Compiler Errors (irgendwas mit dem Linker)
    Und zum Schluss habe ich versucht mit GTKMM und GTKGLEXTMM was zu machen (bei letzterem gibts allerdings keine Binaries, also hab ich das auch nicht geschafft)


    Also habe ich mal ein GUI mit Winforms gemacht, und damit "herumgespielt (ein neues Glut-fenster ist ja kein Problem beim laden, aber das Fenster in ein Panel zu bekommen.....vielleicht ists ja doch mit MFC leichter??)


    Vielleicht hat von euch jemand eine ahnung, wie man leicht ein glut-Window an ein Panel "binden" kann, oder wie man ohne glut in ein Panel zeichnen kann. Oder eventuell gibts ein ganz einfache Variante, die mir bis jetzt nicht vor die Augen gekommen ist......


    Wäre sehr nett, wenn ihr mir auf die Sprünge helfen könntet.

    Lg
    Spite