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