Rdzeń kodu (wyświetlanie czerwony prostokąt):Drawing VBO z glDrawArrays działa w OpenGL 2.1, ale nie w OpenGL 3.x
//bind program, set uniforms, bind vbo
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,0);
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
//unbind vbo, unbind program
Kiedy przełączyć kontekst OpenGL 3.x ten kod przestaje działać (Widzę tylko kolor tła), ale gdy inicjuję VAO w taki sam sposób, jak powyższy kod, a następnie wiążę VAO i wywołuję glDrawArrays, to działa.
Co może być problemem? Jak mogę narysować VBO bez użycia VAO?
(shadery są naprawdę proste, vs tylko mulitplies matryce i wyjścia ps kolor czerwony)
myślałem że VAO są opcjonalne. (mój kod nie powoduje żadnych błędów). Więc jak powinienem używać VAO? 1 VAO = 1 model? – chris
Tymczasowo użyję jednego globalnego VAO. – chris
Możesz zebrać wiele modeli w jednym VAO. Zwykle kolekcjonuję siatki o podobnych właściwościach, które zawsze łączą się w VAO. Na przykład wszystkie statyczne elementy mapy silnika gry, które używają tego samego modułu cieniującego, mogą być gromadzone w jednym VAO. Sortowanie przez moduł cieniujący i właściwości materiału jest prawdopodobnie najlepszym kryterium sortowania, powiedziałbym. – datenwolf