Ich frage mich, was zu Daten geschieht, die ohne Informationen, ex gesendet wird:Was macht openGL mit leeren/nicht initialisierten Daten?
struct Vertex
{
glm::vec3 Positions, UVs, Normals;
};
std::vector<Vertex> vertices;
// We fill vertices with a bunch of Vertex' that only have Positions and UVs filled in.
// Normals aren't iniatalized so im assuming they're a glm::vec3(0.0f,0.0f,0.0f) by default
später im Code, während die Puffer schaffen wir die Daten senden, weisen wir die Puffer mit einer Größe von sizeof(Vertex) * vertices[0]
zu haben.
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<GLvoid*>(offsetof(Vertex, Positions)));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<GLvoid*>(offsetof(Vertex, UVs)));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), reinterpret_cast<GLvoid*>(offsetof(Vertex, Normals)));
Was ist der Shader mit den Vertex::Normal
Daten in jedem der beiden Fälle, in Shadern tun:
1.)
#version 450 core
layout(location = 0) in vec3 Pos;
layout(location = 1) in vec3 UVs;
layout(location = 2) in vec3 Norms;
void main()
{
// We only use Pos and UVs, Norms is never referenced.
}
2.)
#version 450 core
layout(location = 0) in vec3 Pos;
layout(location = 1) in vec3 UVs;
void main(){...}
1 .) Zum einen erwarte ich, dass der Shader das nicht initialisierte vec3 von Norms speichert, da wir ihm eine Lok geben um die Daten abzurufen. Aber ich habe auch gehört, dass Shader alle Daten löschen, die nicht verwendet werden.
2.) Ich erwarte, dass die vec3 Normen verworfen werden, da es noch keine Stelle im Shader hat, obwohl ich die Daten durch die noch glVertexAttribArray(...)
Danke für die Hilfe schicken!