Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2019-05-22 14:27:43 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-22 14:29:05 +0300
commitf05b9dba26607c319fa2246ec915490f10ca86e6 (patch)
tree286921a0211b4cc8788d238b00ce680894865506 /source/blender/draw/intern/draw_manager_exec.c
parent60319e25f246128f51009c2f3bb731e4218bd008 (diff)
DRW: Only change VAO if geometry changes
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 05356740041..7c53d8f4fff 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -587,18 +587,22 @@ static void draw_geometry_prepare(DRWShadingGroup *shgroup, DRWCall *call)
}
}
-static void draw_geometry_execute(DRWShadingGroup *shgroup,
- GPUBatch *geom,
- uint vert_first,
- uint vert_count,
- uint inst_first,
- uint inst_count)
+BLI_INLINE void draw_geometry_execute(DRWShadingGroup *shgroup,
+ GPUBatch *geom,
+ uint vert_first,
+ uint vert_count,
+ uint inst_first,
+ uint inst_count)
{
/* bind vertex array */
- GPU_batch_program_set_no_use(
- geom, GPU_shader_get_program(shgroup->shader), GPU_shader_get_interface(shgroup->shader));
+ if (DST.batch != geom) {
+ DST.batch = geom;
- GPU_batch_bind(geom);
+ GPU_batch_program_set_no_use(
+ geom, GPU_shader_get_program(shgroup->shader), GPU_shader_get_interface(shgroup->shader));
+
+ GPU_batch_bind(geom);
+ }
/* XXX hacking gawain. we don't want to call glUseProgram! (huge performance loss) */
geom->program_in_use = true;
@@ -898,6 +902,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
}
GPU_shader_bind(shgroup->shader);
DST.shader = shgroup->shader;
+ DST.batch = NULL;
}
if (shgroup->tfeedback_target != NULL) {