/* a rendering.c mixin */ #ifndef QUAD_ELEMENT_BUFFER_H #define QUAD_ELEMENT_BUFFER_H #include #include #define QUAD_ELEMENT_BUFFER_LENGTH (65536 / 6) static void bind_quad_element_buffer(void) { static GLuint buffer = 0; /* it's only generated once at runtime */ if (buffer == 0) { glGenBuffers(1, &buffer); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); glBufferData(GL_ELEMENT_ARRAY_BUFFER, QUAD_ELEMENT_BUFFER_LENGTH * 6, NULL, GL_STATIC_DRAW); uint16_t *const indices = glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); for (uint16_t i = 0; i < QUAD_ELEMENT_BUFFER_LENGTH; ++i) { indices[i * 6 + 0] = (uint16_t)(i * 4 + 0); indices[i * 6 + 1] = (uint16_t)(i * 4 + 1); indices[i * 6 + 2] = (uint16_t)(i * 4 + 2); indices[i * 6 + 3] = (uint16_t)(i * 4 + 2); indices[i * 6 + 4] = (uint16_t)(i * 4 + 3); indices[i * 6 + 5] = (uint16_t)(i * 4 + 0); } glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); } else glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer); } #endif