Guest User

Untitled

a guest
Mar 20th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
  2. index f028ea00..0ec1aad5 100644
  3. --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
  4. +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
  5. @@ -50,6 +50,12 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) {
  6. state.draw.uniform_buffer = uniform_buffer.handle;
  7. state.Apply();
  8.  
  9. + // Allocate vertex buffer
  10. + vertex_buffer_size = 1024 * 1024;
  11. + glBufferStorage(GL_ARRAY_BUFFER, vertex_buffer_size * sizeof(HardwareVertex), NULL, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
  12. + 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);
  13. + vertex_buffer_usage = 0;
  14. +
  15. // Bind the UBO to binding point 0
  16. glBindBufferBase(GL_UNIFORM_BUFFER, 0, uniform_buffer.handle);
  17.  
  18. @@ -434,9 +440,15 @@ void RasterizerOpenGL::DrawTriangles() {
  19. state.Apply();
  20.  
  21. // Draw the vertex batch
  22. - glBufferData(GL_ARRAY_BUFFER, vertex_batch.size() * sizeof(HardwareVertex), vertex_batch.data(),
  23. - GL_STREAM_DRAW);
  24. - glDrawArrays(GL_TRIANGLES, 0, (GLsizei)vertex_batch.size());
  25. + if (vertex_buffer_usage + vertex_batch.size() > vertex_buffer_size) {
  26. + // reallocate the vertex buffer
  27. + 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);
  28. + vertex_buffer_usage = 0;
  29. + }
  30. + memcpy(vertex_buffer_pointer, vertex_batch.data(), vertex_batch.size() * sizeof(HardwareVertex));
  31. + glDrawArrays(GL_TRIANGLES, vertex_buffer_usage, vertex_buffer_usage+(GLsizei)vertex_batch.size());
  32. + vertex_buffer_pointer += vertex_batch.size();
  33. + vertex_buffer_usage += vertex_batch.size();
  34.  
  35. // Disable scissor test
  36. state.scissor.enabled = false;
  37. diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
  38. index 18808b1e..9ff84250 100644
  39. --- a/src/video_core/renderer_opengl/gl_rasterizer.h
  40. +++ b/src/video_core/renderer_opengl/gl_rasterizer.h
  41. @@ -286,6 +286,9 @@ private:
  42. OGLBuffer vertex_buffer;
  43. OGLBuffer uniform_buffer;
  44. OGLFramebuffer framebuffer;
  45. + int vertex_buffer_usage;
  46. + int vertex_buffer_size;
  47. + HardwareVertex* vertex_buffer_pointer;
  48.  
  49. OGLBuffer lighting_lut_buffer;
  50. OGLTexture lighting_lut;
Add Comment
Please, Sign In to add comment