Zakładam, że będzie to jedna z tych rzeczy, która jest "nieokreślona", ale nie mogę znaleźć konkretnej odpowiedzi od Google.Wartość domyślna OpenGL dla niebuforowanego atrybutu vertex przy korzystaniu z kwalifikatorów układu
Powiedzmy w moim vertex shader mam:
layout(location = 0) in vec3 vPosition;
layout(location = 1) in vec3 vNormal;
layout(location = 2) in vec4 vColour;
Ale nie ma nic buforowane do położenia 2 z glEnableVertexAttribArray() lub glVertexAttribPointer(). Czy mogę oczekiwać, że wartość będzie czymś szczególnym?
Przyjęłam dla vec4, że będzie to w przedziale {0,0,0,0}, {0,0,0,1} lub {1,1,1,1}, ale w mój przypadek to {0,0,1,1}.
Kiedy wcześniej użyłem glBindAttribLocation() do określenia lokalizacji, domyślnie ustawiono na {1, 11,1} na 4 różnych maszynach przy użyciu 3 różnych systemów operacyjnych (ubuntu 12.04, Windows 7 i Ubuntu 10.04).
Czy można bezpiecznie założyć, że wartość będzie wynosiła {0,0,1,1} na różnych maszynach? czy to był po prostu zbieg okoliczności?
Ustawiłem więc glDisableVertexAttribArray() dla określonego numeru lokalizacji, ale nadal jest on odczytywany w module cieniującym jako {0,0,1,1}. Używam VAO, więc dzwonię tylko raz. Czy powinienem je wyłączyć zaraz przed wywołaniem mojego glDrawElements()? – kbirk
@Pondwater: Jeśli VAO dezaktywuje, to jest wyłączone. Nie musisz wyłączać go ponownie. Zrobiłem też addendum do odpowiedzi. –
Ahh, to ma sens! Dziękuję za wyjaśnienie! – kbirk