| @@ -89,6 +89,7 @@ Scene::~Scene() | |||||
| /* FIXME: this must be done while the GL context is still active. | /* FIXME: this must be done while the GL context is still active. | ||||
| * Change the architecture to make sure of that. */ | * Change the architecture to make sure of that. */ | ||||
| glDeleteBuffers(data->nbufs, data->bufs); | glDeleteBuffers(data->nbufs, data->bufs); | ||||
| free(data->bufs); | |||||
| delete data; | delete data; | ||||
| } | } | ||||
| @@ -199,38 +200,39 @@ void Scene::Render() // XXX: rename to Blit() | |||||
| } | } | ||||
| #if LOL_EXPERIMENTAL | #if LOL_EXPERIMENTAL | ||||
| GLuint vao, vbo[2], attr; | |||||
| GLuint vao; | |||||
| glGenVertexArrays(1, &vao); | glGenVertexArrays(1, &vao); | ||||
| glBindVertexArray(vao); | glBindVertexArray(vao); | ||||
| glGenBuffers(2, &vbo[0]); | |||||
| glBindBuffer(GL_ARRAY_BUFFER, vbo[0]); | |||||
| glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), vertex, GL_STATIC_DRAW); | |||||
| glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0); | |||||
| glEnableVertexAttribArray(attr_pos); | |||||
| glBindBuffer(GL_ARRAY_BUFFER, vbo[1]); | |||||
| glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), texture, GL_STATIC_DRAW); | |||||
| glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, 0); | |||||
| glEnableVertexAttribArray(attr_tex); | |||||
| stdshader->Bind(); | |||||
| #else | #else | ||||
| glEnableClientState(GL_VERTEX_ARRAY); | glEnableClientState(GL_VERTEX_ARRAY); | ||||
| glEnableClientState(GL_TEXTURE_COORD_ARRAY); | glEnableClientState(GL_TEXTURE_COORD_ARRAY); | ||||
| #endif | |||||
| glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); | glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); | ||||
| glBufferData(GL_ARRAY_BUFFER, 6 * 3 * (n - i) * sizeof(float), | |||||
| vertex, GL_DYNAMIC_DRAW); | |||||
| glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), | |||||
| vertex, GL_STATIC_DRAW); | |||||
| #if LOL_EXPERIMENTAL | |||||
| glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, 0); | |||||
| glEnableVertexAttribArray(attr_pos); | |||||
| #else | |||||
| glVertexPointer(3, GL_FLOAT, 0, NULL); | glVertexPointer(3, GL_FLOAT, 0, NULL); | ||||
| #endif | |||||
| glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf + 1]); | glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf + 1]); | ||||
| glBufferData(GL_ARRAY_BUFFER, 6 * 2 * (n - i) * sizeof(float), | |||||
| texture, GL_DYNAMIC_DRAW); | |||||
| glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), | |||||
| texture, GL_STATIC_DRAW); | |||||
| #if LOL_EXPERIMENTAL | |||||
| glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, 0); | |||||
| glEnableVertexAttribArray(attr_tex); | |||||
| #else | |||||
| glTexCoordPointer(2, GL_FLOAT, 0, NULL); | glTexCoordPointer(2, GL_FLOAT, 0, NULL); | ||||
| #endif | #endif | ||||
| #if LOL_EXPERIMENTAL | |||||
| stdshader->Bind(); | |||||
| #endif | |||||
| Tiler::Bind(data->tiles[i].code); | Tiler::Bind(data->tiles[i].code); | ||||
| glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6); | glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6); | ||||