Beschreibbares char Array für C-Funktion bereitstellen, wie in modernem C++?
-
Also beim vector schätze ich mal ja, sorry hustbaer, hab deine Antwort nicht richtig gelesen.
-
Salzwasser schrieb:
Ist das denn legal? Darf man die Funktion einfach in &infoLog[0] schreiben lassen, oder kann es Probleme geben?
Ja, überschreiben kannste. Also der Speicher ist da und es ist solange Deiner.
Hab mich gerade aber nicht erinnert, daß '\0' das Endezeichen ist, wo std::<< aufhört, den std::string auszugeben. *angst*
Könnte er so aprilsonnig sein und bis zu seinem .end() ausgeben?Salzwasser schrieb:
Alternativ fällt mir noch ein:
Hmm.
Salzwasser schrieb:
Was ist der richtige Weg?
Klar, man braucht C++-Wrapper um C-APIs. Aber mit Gewalt C++ ist nicht der Weg. C++ kann auch C.
-
Salzwasser schrieb:
Schön und gut, ich kenne aber die Länge des Logs nicht.
Egal was du tust, bei diesem API musst du vorher eine Länge festlegen.
-
Salzwasser schrieb:
Schön und gut, ich kenne aber die Länge des Logs nicht.
Dann lies nochmal in der Dokumentation zu
glGetShaderInfoLog(), ob es nicht eine Möglichkeit gibt, die Länge beim Shader anzufragen.Belohnt Deine Suche wird!

-
Furble Wurble schrieb:
Salzwasser schrieb:
Schön und gut, ich kenne aber die Länge des Logs nicht.
Dann lies nochmal in der Dokumentation zu
glGetShaderInfoLog(), ob es nicht eine Möglichkeit gibt, die Länge beim Shader anzufragen.Belohnt Deine Suche wird!

Du hast mich falsch verstanden. Ich kenne die Länge zur Compilezeit nicht und möchte sie deshalb nicht auf 1024 fixieren.
-
Salzwasser schrieb:
Furble Wurble schrieb:
Salzwasser schrieb:
Schön und gut, ich kenne aber die Länge des Logs nicht.
Dann lies nochmal in der Dokumentation zu
glGetShaderInfoLog(), ob es nicht eine Möglichkeit gibt, die Länge beim Shader anzufragen.Belohnt Deine Suche wird!

Du hast mich falsch verstanden. Ich kenne die Länge zur Compilezeit nicht und möchte sie deshalb nicht auf 1024 fixieren.
Hä? Furble wurble hat dir die Lösung doch gesagt du kannst die Size von glgetshaderinfolog abfragen und dann einen entsprechend großen String oder vector zur Laufzeit erstellen.
-
Ruvi schrieb:
Hä? Furble wurble hat dir die Lösung doch gesagt du kannst die Size von glgetshaderinfolog abfragen und dann einen entsprechend großen String oder vector zur Laufzeit erstellen.
Das weiß ich doch. Die Lösung von TGGC und Volkard oben war, ein char-Array mit fester Länge von 1024 anzulegen. Das mochte ich nicht.
Es war niemals das Problem, die Länge dynamisch abzufragen.
-
The size of the buffer required to store the returned information log can be obtained by calling glGetShaderiv with the value GL_INFO_LOG_LENGTH.
-
Persönliche finde ich die unique_ptr Lösung am besten. Beim Arbeiten mit C-APIs ist es meiner Meinung nach auch die eleganteste Lösung. Anschliessend das char Array in einen std::string hauen.
-
unique_ptr<T[]>ist als Lösung sicher OK.
Ich persönlicher finde allerdingsvector<T>einfacher, und sehe keine Vorteil darinunique_ptrzu verwenden.