Float-Array aus Funktion zurückgeben
-
Hi,
ich habe eine ziemlich Anfängerfrage:
Wie geben ich am Besten ein Float-Array aus einer Funktion zurück.
Ich habe versucht:
float* Color::GetArray() { std::vector<float> values; values.push_back(this->R); values.push_back(this->G); values.push_back(this->B); values.push_back(this->Alpha); return &values[0]; }Aber das scheint irgendwie nicht so richtig zu funktionieren. OpenGL kommt damit irgendwie nicht zurecht.
Gruß
-
Du gibst einen Zeiger auf den Vectorinhalt zurück. Allerdings wird der Vector ja am Ender der Funktion zerstört, der Zeiger zeigt also auf zufälligen Speicher.
Gib den Vector zurück:
std::vector<float> Color::GetArray() { std::vector<float> values; values.push_back(this->R); values.push_back(this->G); values.push_back(this->B); values.push_back(this->Alpha); return values; }
-
Einfach den
std::vectorzurückgeben:std::vector<float> Color::GetArray() { std::vector<float> values; values.push_back(this->R); values.push_back(this->G); values.push_back(this->B); values.push_back(this->Alpha); return values; }Anstatt einen
std::vectorzurückzugeben wäre es wahrscheinlich besser die vier Werte in einestructzu packen. Dann kann man schön mit dem Namen auf die Werte zugreifen als über einen Index.
-
icarus2 schrieb:
Anstatt einen
std::vectorzurückzugeben wäre es wahrscheinlich besser die vier Werte in einestructzu packen. Dann kann man schön mit dem Namen auf die Werte zugreifen als über einen Index.Offenbar ist die Klasse Color ja schon so etwas, aber aus irgendeinem Grund scheint er die noch mal umkopieren zu wollen.
-
Hi,
der Grund ist, dass glUniform4fv() ein Float-Array haben will.
Gruß
-
Raven280438 schrieb:
Hi,
der Grund ist, dass glUniform4fv() ein Float-Array haben will.
Gruß
Dann ruf ausserhalb der Funktion einfach die Methode
.dataauf. Oder alternativ&x[0].
-
return ein
std::array<float>
-
dot schrieb:
return ein
std::array<float>
Soetwas gibt es nicht.
-
manni66 schrieb:
dot schrieb:
return ein
std::array<float>
Soetwas gibt es nicht.
dann eben ein
std::array<float,4>
-
dot schrieb:
return ein
std::array<float, 4>
FTFY
-
Dschinni schrieb:
dot schrieb:
return ein
std::array<float, 4>
FTFY
thx
