mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	OGL: Use stream buffer for vertex data.
This commit is contained in:
		
							parent
							
								
									50598fbbf4
								
							
						
					
					
						commit
						ac92664aa7
					
				
					 2 changed files with 15 additions and 6 deletions
				
			
		|  | @ -41,12 +41,13 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { | |||
|     } | ||||
| 
 | ||||
|     // Generate VBO, VAO and UBO
 | ||||
|     vertex_buffer.Create(); | ||||
|     vertex_buffer = OGLStreamBuffer::MakeBuffer(GLAD_GL_ARB_buffer_storage, GL_ARRAY_BUFFER); | ||||
|     vertex_buffer->Create(VERTEX_BUFFER_SIZE, VERTEX_BUFFER_SIZE / 2); | ||||
|     vertex_array.Create(); | ||||
|     uniform_buffer.Create(); | ||||
| 
 | ||||
|     state.draw.vertex_array = vertex_array.handle; | ||||
|     state.draw.vertex_buffer = vertex_buffer.handle; | ||||
|     state.draw.vertex_buffer = vertex_buffer->GetHandle(); | ||||
|     state.draw.uniform_buffer = uniform_buffer.handle; | ||||
|     state.Apply(); | ||||
| 
 | ||||
|  | @ -434,9 +435,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()); | ||||
|     size_t max_vertices = 3 * (VERTEX_BUFFER_SIZE / (3 * sizeof(HardwareVertex))); | ||||
|     for (size_t base_vertex = 0; base_vertex < vertex_batch.size(); base_vertex += max_vertices) { | ||||
|         size_t vertices = std::min(max_vertices, vertex_batch.size() - base_vertex); | ||||
|         size_t vertex_size = vertices * sizeof(HardwareVertex); | ||||
|         auto map = vertex_buffer->Map(vertex_size, 1); | ||||
|         memcpy(map.first, vertex_batch.data() + base_vertex, vertex_size); | ||||
|         vertex_buffer->Unmap(); | ||||
|         glDrawArrays(GL_TRIANGLES, map.second / sizeof(HardwareVertex), (GLsizei)vertices); | ||||
|     } | ||||
| 
 | ||||
|     // Disable scissor test
 | ||||
|     state.scissor.enabled = false; | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
| #include "video_core/renderer_opengl/gl_resource_manager.h" | ||||
| #include "video_core/renderer_opengl/gl_shader_gen.h" | ||||
| #include "video_core/renderer_opengl/gl_state.h" | ||||
| #include "video_core/renderer_opengl/gl_stream_buffer.h" | ||||
| #include "video_core/renderer_opengl/pica_to_gl.h" | ||||
| #include "video_core/shader/shader.h" | ||||
| 
 | ||||
|  | @ -283,7 +284,8 @@ private: | |||
| 
 | ||||
|     std::array<SamplerInfo, 3> texture_samplers; | ||||
|     OGLVertexArray vertex_array; | ||||
|     OGLBuffer vertex_buffer; | ||||
|     static constexpr size_t VERTEX_BUFFER_SIZE = 128 * 1024 * 1024; | ||||
|     std::unique_ptr<OGLStreamBuffer> vertex_buffer; | ||||
|     OGLBuffer uniform_buffer; | ||||
|     OGLFramebuffer framebuffer; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue