
Presentation done, no prize for the best poster, oh well..
Two more weeks..
Compute / Game Dev Blog.
Small memory leak was driving me crazy; Debugging process was taking ages.. bored, frustrated and tired decided to play about with octrees depth and minimal/maximal number of elements in leaf.. Amazed by 300FPS discovered the stupid mistake of creating VBO each time the leaf is regenerated. Instant win; fix of memory leak and 10 times greater performance.
Who said that the mistakes are stupid?
Finally, my grid is editable now.
We can edit or remove current blocks – adding new ones will be introduced after optimisation stage.
Current version supports 4 standard blocks (Blue, Green, Yellow, Brown) and 1 point light (Blue with circle in the middle).
In this iteration of “boxel engine” regenerateBuffers method updates nearest block that collides with ray fired from camera POV within worldGrid 3 dimensional table, after that, buffers that contain shadow and light powers are recalculated, at the end two openGL methods are called (for each buffer):
1 2 | glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer[sectorID]); glBufferSubData(GL_ARRAY_BUFFER, 0, frame_vertices[sectorID].size()*sizeof(glm::vec3), &frame_vertices[sectorID][0][0]); |
first, buffer is bind, and then values are updated, starting from index 0 and then updating whole buffer.
Optimisation, that I will be introducing soon, is updating only changed values that will reduce data size.
That has to be send to graphics card.
Note:
Grid 64 recalculation takes a while :S
Metrics will be added soon.