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-06-23 12:20:20 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-08-17 15:48:49 +0300
commitef879577995f44f4d3fea8cb5342de62ed9f731f (patch)
tree44e54db729927a65ecc60d1e2ca62fe1a576c24a
parent64aafef5ba6c265aecdf1c92b487418da5580944 (diff)
Cleanup: DRW: Add draw_call_batching_flush for easier code understanding
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index d2801b1d994..532d31fb2ed 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -1049,6 +1049,16 @@ static void draw_call_resource_bind(DRWCommandsState *state, DRWResourceHandle h
}
}
+static void draw_call_batching_flush(DRWShadingGroup *shgroup, DRWCommandsState *state)
+{
+ draw_indirect_call(shgroup, state);
+ GPU_draw_list_submit(DST.draw_list);
+
+ state->batch = NULL;
+ state->inst_count = 0;
+ state->base_inst = -1;
+}
+
static void draw_call_single_do(DRWShadingGroup *shgroup,
DRWCommandsState *state,
GPUBatch *batch,
@@ -1057,15 +1067,7 @@ static void draw_call_single_do(DRWShadingGroup *shgroup,
int vert_count,
int inst_count)
{
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
-
- state->batch = batch;
- state->v_first = 0;
- state->v_count = 0;
- state->inst_count = 0;
- state->base_inst = -1;
+ draw_call_batching_flush(shgroup, state);
draw_call_resource_bind(state, handle);
@@ -1112,9 +1114,7 @@ static void draw_call_batching_do(DRWShadingGroup *shgroup,
(call->handle.chunk != state->resource_chunk) || /* Need to change UBOs. */
(call->batch != state->batch) /* Need to change VAO. */
) {
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
+ draw_call_batching_flush(shgroup, state);
state->batch = call->batch;
state->v_first = 0;
@@ -1144,9 +1144,7 @@ static void draw_call_batching_do(DRWShadingGroup *shgroup,
/* Flush remaining pending drawcalls. */
static void draw_call_batching_finish(DRWShadingGroup *shgroup, DRWCommandsState *state)
{
- /* Flush pending drawcalls. */
- draw_indirect_call(shgroup, state);
- GPU_draw_list_submit(DST.draw_list);
+ draw_call_batching_flush(shgroup, state);
/* Reset state */
if (state->neg_scale) {
@@ -1208,13 +1206,18 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
draw_call_batching_start(&state);
while ((cmd = draw_command_iter_step(&iter, &cmd_type))) {
+
switch (cmd_type) {
+ case DRW_CMD_STENCIL:
+ draw_call_batching_flush(shgroup, &state);
+ break;
case DRW_CMD_DRAW:
case DRW_CMD_DRAW_PROCEDURAL:
case DRW_CMD_DRAW_INSTANCE:
if (draw_call_is_culled(cmd->instance.handle, DST.view_active)) {
continue;
}
+ break;
default:
break;
}