summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
authorSebastian Valle <subv2112@gmail.com>2018-07-02 21:07:38 +0200
committerGitHub <noreply@github.com>2018-07-02 21:07:38 +0200
commit055f1546d7d69fdcc06693847aeddda30535b283 (patch)
tree61cd63db220881c29eb8be42934c1f6f87b56109 /src/video_core/renderer_opengl
parentMerge pull request #603 from Subv/nvmap_free (diff)
parentGPU: Implement offsetted rendering when using non-indexed drawing. (diff)
downloadyuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar.gz
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar.bz2
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar.lz
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar.xz
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.tar.zst
yuzu-055f1546d7d69fdcc06693847aeddda30535b283.zip
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 45560fbee..324c28d1b 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -412,14 +412,16 @@ void RasterizerOpenGL::DrawArrays() {
const GLenum primitive_mode{MaxwellToGL::PrimitiveTopology(regs.draw.topology)};
if (is_indexed) {
- const GLint index_min{static_cast<GLint>(regs.index_array.first)};
- 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,
- MaxwellToGL::IndexFormat(regs.index_array.format),
- reinterpret_cast<const void*>(index_buffer_offset),
- -index_min);
+ const GLint base_vertex{static_cast<GLint>(regs.vb_element_base)};
+
+ // 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),
+ reinterpret_cast<const void*>(index_buffer_offset), base_vertex);
} else {
- glDrawArrays(primitive_mode, 0, regs.vertex_buffer.count);
+ glDrawArrays(primitive_mode, regs.vertex_buffer.first, regs.vertex_buffer.count);
}
// Disable scissor test