1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

OpenGL invalid operation

    • Frage
  • Spite82
  • 16. Mai 2008 um 09:06
  • Unerledigt
  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 16. Mai 2008 um 09:06
    • #1

    Hallo an alle, die sich mit Opengl auskennen :winking_face:

    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:

    Code
    //Wege rendern
                glBegin(GL_LINES);
                int streetSize = (int)network->strassen.size();
                for (int i = 0; i < streetSize; i++)
                {
                    //nur rendern wenn der Wert "deleted" nicht true gesetzt ist
                    if (!network->strassen[i].deleted)
                    {
                        //setzen der Farbwerte, sowie der Linienstärke
                        if (network->strassen[i].isHighway)
                        {
                            glColor3f(0.0, 0.0, 0.0);
                            glLineWidth(2.0);
                        }
                        else
                        {
                            glColor3f(0.5, 0.5, 0.5);
                            glLineWidth(1.0);
                        }
    
                        //rendern des Weges
                        glVertex2f(startx + scale * network->kreuzungen[network->strassen[i].startcross].x, starty + scale * network->kreuzungen[network->strassen[i].startcross].y);
                        glVertex2f(startx + scale * network->kreuzungen[network->strassen[i].endcross].x, starty + scale * network->kreuzungen[network->strassen[i].endcross].y);
                    }
                }
                glEnd();
                glColor3f(1.0, 1.0, 1.0);
    
        {
            int error = glGetError();
            stringstream temp;
            if (error != GL_NO_ERROR) {
              temp << gluErrorString(error);
              string tempStr = temp.str();
              int cnt = 0;
            }
        }
    Alles anzeigen

    (die letzte Codezeile ist eigentlich sinnlos :winking_face: - 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 :winking_face:

    Lg
    Spite

  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 16. Mai 2008 um 09:10
    • #2

    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 :winking_face:

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

    Lg
    Spite

  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 16. Mai 2008 um 09:32
    • #3

    Ok, so ganz wars das dann doch noch nicht :frowning_face:
    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 :winking_face: ), 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

  • Spite82
    8
    Spite82
    Mitglied
    Reaktionen
    1
    Punkte
    571
    Beiträge
    89
    • 17. Mai 2008 um 13:36
    • #4

    Noch eine Idee von mir:

    Kann es sein, daß dieser Fehler nur dann auftritt, wenn ein eigener Thread irgendwas macht?
    Sieht so aus:
    GUI ruft die render-Funktionen auf -> keine "Invalid Operation" -> alles ok
    GUI startet einen Thread welcher berechnungen durchführt -> "Invalid Operation", obwohl noch nichts passiert ist..... also gleich nach dem Aufruf der Funktion

    Kann das sein? Bzw, kann man das verhindern, oder sollte ich mal die Displaylisten mit meinem "Standard-Render-Thread" erstellen lassen?
    Ich hoffe es ist so halbwegs klar, was ich meine, bzw. liest sich das überhaupt wer durch :winking_face:

    Lg
    Spite

    edit:
    Ja hab das gerade getestet, wenn ich den Render-Befehl aus einem eigenen Thread heraus gebe bekomme ich auch einen Error - hat jemand eine Ahnung, wie man das umgehen kann?

    Einmal editiert, zuletzt von Spite82 (17. Mai 2008 um 13:44)

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung