textures working on web, separation of vertex and index buffers (actually matters)
This commit is contained in:
@ -29,6 +29,18 @@ void delete_vertex_buffer(VertexBuffer buffer) {
|
||||
}
|
||||
|
||||
|
||||
IndexBuffer create_index_buffer(void) {
|
||||
GLuint result;
|
||||
glGenBuffers(1, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
void delete_index_buffer(IndexBuffer buffer) {
|
||||
glDeleteBuffers(1, &buffer);
|
||||
}
|
||||
|
||||
|
||||
void specify_vertex_buffer(VertexBuffer buffer, void const *data, size_t bytes) {
|
||||
glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, bytes, data, GL_STREAM_DRAW);
|
||||
@ -36,14 +48,21 @@ void specify_vertex_buffer(VertexBuffer buffer, void const *data, size_t bytes)
|
||||
}
|
||||
|
||||
|
||||
VertexBuffer get_quad_element_buffer(void) {
|
||||
static VertexBuffer buffer = 0;
|
||||
void specify_index_buffer(IndexBuffer buffer, void const *data, size_t bytes) {
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bytes, data, GL_STATIC_DRAW);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
}
|
||||
|
||||
|
||||
IndexBuffer get_quad_element_buffer(void) {
|
||||
static IndexBuffer buffer = 0;
|
||||
|
||||
/* it's only generated once at runtime */
|
||||
/* TODO: use builder interface, not direct calls (glMapBuffer isn't portable) */
|
||||
if (buffer == 0) {
|
||||
buffer = create_vertex_buffer();
|
||||
VertexBufferBuilder builder = build_vertex_buffer(buffer, sizeof (GLshort) * QUAD_ELEMENT_BUFFER_LENGTH * 6 );
|
||||
buffer = create_index_buffer();
|
||||
IndexBufferBuilder builder = build_index_buffer(buffer, sizeof (GLshort) * QUAD_ELEMENT_BUFFER_LENGTH * 6 );
|
||||
|
||||
for (size_t i = 0; i < QUAD_ELEMENT_BUFFER_LENGTH; ++i) {
|
||||
((GLshort *)builder.base)[i * 6 + 0] = (GLshort)(i * 4 + 0);
|
||||
@ -54,7 +73,7 @@ VertexBuffer get_quad_element_buffer(void) {
|
||||
((GLshort *)builder.base)[i * 6 + 5] = (GLshort)(i * 4 + 0);
|
||||
}
|
||||
|
||||
finish_vertex_builder(&builder);
|
||||
finish_index_builder(&builder);
|
||||
}
|
||||
|
||||
SDL_assert_always(buffer);
|
||||
@ -63,12 +82,12 @@ VertexBuffer get_quad_element_buffer(void) {
|
||||
}
|
||||
|
||||
|
||||
VertexBuffer get_circle_element_buffer(void) {
|
||||
static VertexBuffer buffer = 0;
|
||||
IndexBuffer get_circle_element_buffer(void) {
|
||||
static IndexBuffer buffer = 0;
|
||||
|
||||
if (buffer == 0) {
|
||||
buffer = create_vertex_buffer();
|
||||
VertexBufferBuilder builder = build_vertex_buffer(buffer, sizeof (GLshort) * (CIRCLE_VERTICES_MAX - 2) * 3);
|
||||
buffer = create_index_buffer();
|
||||
IndexBufferBuilder builder = build_index_buffer(buffer, sizeof (GLshort) * (CIRCLE_VERTICES_MAX - 2) * 3);
|
||||
|
||||
for (size_t i = 1; i < CIRCLE_VERTICES_MAX - 1; ++i) {
|
||||
/* first one is center point index, always zero */
|
||||
@ -79,7 +98,7 @@ VertexBuffer get_circle_element_buffer(void) {
|
||||
((GLshort *)builder.base)[(i - 1) * 3 + 2] = (GLshort)i + 1;
|
||||
}
|
||||
|
||||
finish_vertex_builder(&builder);
|
||||
finish_index_builder(&builder);
|
||||
}
|
||||
|
||||
SDL_assert_always(buffer);
|
||||
@ -128,7 +147,11 @@ GPUTexture create_gpu_texture(TextureFilter filter, bool generate_mipmaps, int c
|
||||
SDL_assert(width > 0 && height > 0);
|
||||
SDL_assert(channels > 0 && channels <= 4);
|
||||
|
||||
#ifndef __EMSCRIPTEN__
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, (GLboolean)generate_mipmaps);
|
||||
#else
|
||||
(void)generate_mipmaps;
|
||||
#endif
|
||||
|
||||
if (filter == TEXTURE_FILTER_NEAREAST) {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
|
Reference in New Issue
Block a user