7 GLuint
make_buffer(
const GLenum target,
const size_t data_size,
const void *data,
const GLenum usage )
11 printf(
"[error] 0B buffer...\n");
16 glGenBuffers(1, &buffer);
17 glBindBuffer(target, buffer);
18 glBufferData(target, data_size, data, usage);
26 glGenVertexArrays(1, &vao);
27 glBindVertexArray(vao);
36 glBindVertexArray(vao);
39 glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &n);
43 for(
int i= 0; i < n; i++)
45 glGetVertexAttribiv(i, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
47 glDeleteBuffers(1, &buffer);
51 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
53 glDeleteBuffers(1, &buffer);
55 glDeleteVertexArrays(1, &vao);
60 const int size,
const GLenum type,
const size_t data_size,
const void *data )
68 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) ¤t);
71 printf(
"[error] wrong vertex array %u...\n", current);
72 glBindVertexArray(vao);
76 GLuint buffer=
make_buffer(GL_ARRAY_BUFFER, data_size, data);
80 glVertexAttribPointer(attribute, size, type, GL_FALSE, 0, 0);
81 glEnableVertexAttribArray(attribute);
91 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) ¤t);
94 printf(
"[error] wrong vertex array %u...\n", current);
95 glBindVertexArray(vao);
99 GLuint buffer=
make_buffer(GL_ELEMENT_ARRAY_BUFFER, data_size, data);
104 bool update_buffer(
const GLenum target,
const size_t data_size,
const void *data )
107 GLint buffer_size= 0;
108 glGetBufferParameteriv(target, GL_BUFFER_SIZE, &buffer_size);
109 if((
size_t) buffer_size < data_size)
111 printf(
"[error] updating small buffer %d < %d...\n", (
int) buffer_size, (
int) data_size);
112 glBufferData(target, data_size, data, GL_STATIC_DRAW);
117 glBufferSubData(target, 0, data_size, data);
126 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) ¤t);
129 printf(
"[error] wrong vertex array %u...\n", current);
130 glBindVertexArray(vao);
135 glGetVertexAttribiv(attribute, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
139 glBindBuffer(GL_ARRAY_BUFFER, buffer);
148 glGetIntegerv(GL_VERTEX_ARRAY_BINDING, (GLint *) ¤t);
151 printf(
"[error] wrong vertex array %u...\n", current);
152 glBindVertexArray(vao);
158 glGetIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, (GLint *) &buffer);
162 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
163 return update_buffer(GL_ELEMENT_ARRAY_BUFFER, data_size, data);
GLuint make_buffer(const GLenum target, const size_t data_size, const void *data, const GLenum usage)
cree un buffer. a detruire avec glDeleteBuffers( ).
bool update_vertex_buffer(const GLuint vao, const GLint attribute, const size_t data_size, const void *data)
modifie le contenu d'un vertex buffer associe au vertex format, vao.
void release_vertex_format(const GLuint vao)
detruit le vertex array vao et les buffers associes, crees par make_vertex_buffer() et make_index_buf...
GLuint create_vertex_format()
cree un vertex array. a detruire avec release_vertex_format( ).
GLuint make_index_buffer(const GLuint vao, const size_t data_size, const void *data)
cree un index buffer et configure le vertex array vao. detruit par release_vertex_format( )...
bool update_buffer(const GLenum target, const size_t data_size, const void *data)
modifie le contenu d'un buffer.
bool update_index_buffer(const GLuint vao, const size_t data_size, const void *data)
modifie le contenu d'un index buffer associe au vertex format, vao
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
GLuint make_vertex_buffer(const GLuint vao, const GLint attribute, const int size, const GLenum type, const size_t data_size, const void *data)
cree un vertex buffer et configure le vertex array vao. detruit par release_vertex_format( )...