Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
- index f028ea00..0ec1aad5 100644
- --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
- +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
- @@ -50,6 +50,12 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) {
- state.draw.uniform_buffer = uniform_buffer.handle;
- state.Apply();
- + // Allocate vertex buffer
- + vertex_buffer_size = 1024 * 1024;
- + glBufferStorage(GL_ARRAY_BUFFER, vertex_buffer_size * sizeof(HardwareVertex), NULL, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
- + vertex_buffer_pointer = (HardwareVertex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, vertex_buffer_size * sizeof(HardwareVertex), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
- + vertex_buffer_usage = 0;
- +
- // Bind the UBO to binding point 0
- glBindBufferBase(GL_UNIFORM_BUFFER, 0, uniform_buffer.handle);
- @@ -434,9 +440,15 @@ void RasterizerOpenGL::DrawTriangles() {
- state.Apply();
- // Draw the vertex batch
- - glBufferData(GL_ARRAY_BUFFER, vertex_batch.size() * sizeof(HardwareVertex), vertex_batch.data(),
- - GL_STREAM_DRAW);
- - glDrawArrays(GL_TRIANGLES, 0, (GLsizei)vertex_batch.size());
- + if (vertex_buffer_usage + vertex_batch.size() > vertex_buffer_size) {
- + // reallocate the vertex buffer
- + vertex_buffer_pointer = (HardwareVertex*)glMapBufferRange(GL_ARRAY_BUFFER, 0, vertex_buffer_size * sizeof(HardwareVertex), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
- + vertex_buffer_usage = 0;
- + }
- + memcpy(vertex_buffer_pointer, vertex_batch.data(), vertex_batch.size() * sizeof(HardwareVertex));
- + glDrawArrays(GL_TRIANGLES, vertex_buffer_usage, vertex_buffer_usage+(GLsizei)vertex_batch.size());
- + vertex_buffer_pointer += vertex_batch.size();
- + vertex_buffer_usage += vertex_batch.size();
- // Disable scissor test
- state.scissor.enabled = false;
- diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
- index 18808b1e..9ff84250 100644
- --- a/src/video_core/renderer_opengl/gl_rasterizer.h
- +++ b/src/video_core/renderer_opengl/gl_rasterizer.h
- @@ -286,6 +286,9 @@ private:
- OGLBuffer vertex_buffer;
- OGLBuffer uniform_buffer;
- OGLFramebuffer framebuffer;
- + int vertex_buffer_usage;
- + int vertex_buffer_size;
- + HardwareVertex* vertex_buffer_pointer;
- OGLBuffer lighting_lut_buffer;
- OGLTexture lighting_lut;
Add Comment
Please, Sign In to add comment