Witam! Czytam sobie książkę o open gl https://helion.pl/ksiazki/opengl-ksiega-eksperta-wydanie-vii-graham-sellers-richard-s-wright-jr-nicholas-ha,opglk7.htm#format/d (prędzej czytałem i oglądałem trochę internetowych tutoriali) i próbuje zmienić w moim programie, który właśnie używa internetowego sposobu (internetowego, bo książka pokazuje trochę inaczej) na wczytanie danych do shadera:
struct Vertex {
struct Color {
float r, g, b, a;
} color;
struct Position {
float x, y;
} position;
struct UV {
float u,v;
} uv;
}
if (vao == 0) {
glCreateVertexArrays(1, &vao);
}
glBindVertexArray(vao);
if (vbo == 0) {
glCreateBuffers(1, &vbo);
}
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 4, GL_FLOAT, GL_TRUE, sizeof(Vertex), (void*)offsetof(Vertex, color));
glEnableVertexAttribArray(1);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, uv));
glEnableVertexAttribArray(2);
glBindVertexArray(0);
na książkowy:
struct Vertex {
float x, y, z;
float r, g, b;
}
static const Vertex vertices[] = {...};
glCreateVertexArrays(1, &vao);
glCreateBuffers(1, &vbo);
glNamedBufferStorage(buffer, sizeof(vertices), vertices, 0);
glVertexArrayAttribBinding(vao, 0, 0);
glVertexArrayAttribFormat(vao, 0, 3, GL_FLOAT, GL_FALSE, offsetof(Vertex, x));
glEnableVertexArrayAttrib(0);
glVertexArrayAttribBinding(vao, 1, 0);
glVertexArrayAttribFormat(vao, 1, 3, GL_FLOAT, GL_FALSE, offsetof(Vertex, r));
glEnableVertexArrayAttrib(0);
glVertexArrayVertexBuffer(vao, 0, vbo);
Jak widać w kodzie "internetowym" nie mam obiektu Vertex jako w tej metodzie (w metodzie gdzie robie glBufferData();
, glBufferSubData();
mam takowy), więc w jaki sposób wywołać metodę glNamedBufferStorage()
?
Również metoda glVertexArrayVertexBuffer(vao, 0, vbo);
ma dodatkowo w moim wywołaniu funkcji dodatkowe parametry offset i stride - w książce tego nie ma.
W jaki sposób mógłbym zmienić pierwszy kod na "książkowy"?