From 6871061ca0c5fddff7e1bb15bfd3a6b55f66d1e3 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 26 Jun 2018 15:38:55 +0200 Subject: [PATCH] Modifier Volumes: summing up with triangles is faster than using a quad. --- core/rend/gles/gldraw.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/rend/gles/gldraw.cpp b/core/rend/gles/gldraw.cpp index 191dd395c..a0fbb687e 100644 --- a/core/rend/gles/gldraw.cpp +++ b/core/rend/gles/gldraw.cpp @@ -956,6 +956,8 @@ void DrawModVols(int first, int count) ModifierVolumeParam* params = &pvrrc.global_param_mvo.head()[first]; + int mod_base = -1; + for (u32 cmv = 0; cmv < count; cmv++) { ModifierVolumeParam& param = params[cmv]; @@ -965,20 +967,22 @@ void DrawModVols(int first, int count) u32 mv_mode = param.isp.DepthMode; + if (mod_base == -1) + mod_base = param.first; + if (!param.isp.VolumeLast && mv_mode > 0) SetMVS_Mode(Or, param.isp); // OR'ing (open volume or quad) else SetMVS_Mode(Xor, param.isp); // XOR'ing (closed volume) + glDrawArrays(GL_TRIANGLES, param.first * 3, param.count * 3); if (mv_mode == 1 || mv_mode == 2) { // Sum the area SetMVS_Mode(mv_mode == 1 ? Inclusion : Exclusion, param.isp); - // Use the background poly as a quad to do the sum up - SetupMainVBO(); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - SetupModvolVBO(); + glDrawArrays(GL_TRIANGLES, mod_base * 3, (param.first + param.count - mod_base) * 3); + mod_base = -1; } } //disable culling