Formale parameter mit __declspec(align('16')) nicht ausgerichtet werden
Ich versuche zu machen, die Funktion für die Einstellung shader-Uniform, aber wenn ich versuche zu kompilieren bekomme ich diesen Fehler :
Fehler 2 Fehler C2719: 'value': formale parameter mit
__declspec(align('16')) nicht ausgerichtet werden
Hier ist der code der Funktion:
void Shader::setUniform(std::string name, const glm::mat4 value){
GLint uniform = glGetUniformLocation(m_program, name.c_str());
glUniformMatrix4fv(uniform, 1, GL_FALSE, (GLfloat*)&value);
}
Ich benutze Visual studio 2013.
InformationsquelleAutor der Frage Jozef Culen | 2015-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom In der Dokumentation von Microsoft auf Fehler:
Nicht kopieren der parameter auf einen nicht ausgerichteten Lage. Übergeben Sie eine Konstante Referenz auf das bestehende, ausgerichtet von Daten.
InformationsquelleAutor der Antwort Drew Dormann
Ich bin mir nicht sicher über die Anwendung glm::mat4, aber es ist nicht so, dass legt die Daten innerhalb es auf eine komplette "Wort" Ort im Speicher, oder es wurde in einer nicht fluchtenden Lage (Sie Lesen aus einer Datei? Dabei einige Zeiger-Arithmetik-tricks irgendwo?)
http://virtrev.blogspot.com/2010/09/memory-alignment-theory-and-c-examples.html
Wenn Sie wollen einen hack für 'es funktioniert', die Sie ausprobieren können:
Ich habe diesen trick auf Kraft ausrichten Daten vor. Sie können auch ein memcpy in alignedMat zu zwingen, Dinge ausrichten zu Zeiten. Gehen Sie NICHT davon aus dies ist der richtige Weg, es zu tun. Sollten Sie die Erstellung der Elemente mit der richtigen Ausrichtung. Es ist nur für sehen, was ist aus der Ausrichtung, testen und Debuggen.
Auch wenn Sie den __declspec-Modifizierer, der auf den parameter in der Methodendefinition. Nicht.
InformationsquelleAutor der Antwort Diniden
Derzeit die Programmierung Kugel-Physik mithilfe von Visual Studio 2013. Nehmen Sie die Adresse der variable, hier wird ein 3D-Vektor namens Farbe, um loszuwerden, das alignment-Fehler:
InformationsquelleAutor der Antwort LastBlow