GPU: Fixed the index offset rendering, and implemented the base vertex functionality.

This fixes Stardew Valley.
This commit is contained in:
Subv 2018-07-02 11:22:17 -05:00
parent cc73bad293
commit fca3d1cc65
1 changed files with 8 additions and 6 deletions

View File

@ -412,12 +412,14 @@ void RasterizerOpenGL::DrawArrays() {
const GLenum primitive_mode{MaxwellToGL::PrimitiveTopology(regs.draw.topology)}; const GLenum primitive_mode{MaxwellToGL::PrimitiveTopology(regs.draw.topology)};
if (is_indexed) { if (is_indexed) {
const GLint index_min{static_cast<GLint>(regs.index_array.first)}; const GLint base_vertex{static_cast<GLint>(regs.vb_element_base)};
const GLint index_max{static_cast<GLint>(regs.index_array.first + regs.index_array.count)};
glDrawRangeElementsBaseVertex(primitive_mode, index_min, index_max, regs.index_array.count, // Adjust the index buffer offset so it points to the first desired index.
index_buffer_offset += regs.index_array.first * regs.index_array.FormatSizeInBytes();
glDrawElementsBaseVertex(primitive_mode, regs.index_array.count,
MaxwellToGL::IndexFormat(regs.index_array.format), MaxwellToGL::IndexFormat(regs.index_array.format),
reinterpret_cast<const void*>(index_buffer_offset), reinterpret_cast<const void*>(index_buffer_offset), base_vertex);
-index_min);
} else { } else {
glDrawArrays(primitive_mode, 0, regs.vertex_buffer.count); glDrawArrays(primitive_mode, 0, regs.vertex_buffer.count);
} }