OpenGl Problem Hilfe
-
Herr Schwurbel. Das ist ein sehr guter Hinweis. Nur warum stürzt das Programm dann nicht auch schon im Fenstermodus ab?
-
Furble Wurble schrieb:
Ich habe in die Doku von
glDrawElements()
geschaut, und ein Nullpointer dahinten ergibt keinen Sinn.glDrawElements(GL_TRIANGLES, this->indicies.size(), GL_UNSIGNED_INT, 0);
Siehst Du das auch so?
Die OpenGL Doku ist in dem Fall etwas irreleitend, da der Parameter eine andere Bedeutung bekommt wenn man VBOs verwendet:
https://www.opengl.org/sdk/docs/man4/html/glBindBuffer.xhtml schrieb:
While a non-zero buffer object is bound to the GL_ELEMENT_ARRAY_BUFFER target, the indices parameter of glDrawElements, glDrawElementsInstanced, glDrawElementsBaseVertex, glDrawRangeElements, glDrawRangeElementsBaseVertex, glMultiDrawElements, or glMultiDrawElementsBaseVertex is interpreted as an offset within the buffer object measured in basic machine units.
Als Offset ist die 0 schon korrekt.
Das führt aber zu der Frage wie in den Fullscreen Modus gewechselt wird und ob danach der Buffer noch gebunden ist. Wenn nicht, wird es tatsächlich als Adresse interpretiert und sorgt für den Fehler.
-
Spannend.
-
Also danke für die vielen Antworten erstmal.
Ja ich nutzte VAOs, daher der Nullpointer. Nachdem ich in den Vollbild Wechsele passiert nichts anderes als das ein neues Fenster erzeugt wird. Die VAO wird in einer Klasse gebunden, welche beim wechseln in den Vollbildmodus nicht zerstört wird, also ist das VAO immernoch gebunden. Also komm ich auf den Schluss das das erstellen des Fensters den Buffer Löscht.
GWindow.create(sf::VideoMode(Screen_X_Size, Screen_Y_Size, 64), "Paper Car", sf::Style::Close, sf::ContextSettings(24, 8, 4, 3, 0));
Sobald ich das auskommentiere Funtioniert es nach der Vollbildtaste noch.
Arbeite mit sfml sollte dazu noh gesagt sein.
-
Erzeugt das auch einen neuen Context!? Wenn ja musst du vermutlich alle Ressourcen (VAOs, Buffer, Textures, Shader, ...) neu erzeugen...
-
Auch wenn das Seperat in einer Klasse gespeichert ist?
-
Der OpenGL Context ist an den jeweiligen Thread gebunden (ja, OpenGL ist stellenweise ziemlicher Bullshit). In welcher Klasse irgendwelche Objekte gehalten werden ist OpenGL (leider) völlig egal...
-
Okay, weil ja es wird ein neues Fenser erzeugt... Daher denke ich auch das die Context Settings neu gemacht werden.
Wie kann ich das dann sichern, ohne das Objekt nochmal komplett neu laden zu müssen?
-
1234567890 schrieb:
Wie kann ich das dann sichern, ohne das Objekt nochmal komplett neu laden zu müssen?
Gar nicht.
-
Dann wie kann ich in den vollbildmodus ohne einen neuen Context zu erzeugen?
-
Rein prinzipiell wäre das kein Problem, SFML unterstützt das aber offenbar leider nicht...
-
Okay, dann hab ich hier n ziemlich großes Problem...
-
Habs gelöst, dachte ich muss das ganze modell neu laden, denn das hätte ca. ne sekunde gedauert, aber ich musste ja nur die buffers neu binden und dabei waren die werte noch gespeichert.
Danke, habt mir sehr geholfen