diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 6c62d4d2405..75e4329a41c 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -983,15 +983,17 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, break; case DRW_UNIFORM_BLOCK_OBMATS: state->obmats_loc = uni->location; - ubo = DST.vmempool->matrices_ubo[0]; - GPU_uniformbuffer_bind(ubo, 0); - GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo); + // ubo = DST.vmempool->matrices_ubo[0]; + // GPU_uniformbuffer_bind(ubo, 0); + // GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo); + glUniformBlockBinding(GPU_shader_get_program(shgroup->shader), uni->location, 0); break; case DRW_UNIFORM_BLOCK_OBINFOS: state->obinfos_loc = uni->location; - ubo = DST.vmempool->obinfos_ubo[0]; - GPU_uniformbuffer_bind(ubo, 1); - GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo); + // ubo = DST.vmempool->obinfos_ubo[0]; + // GPU_uniformbuffer_bind(ubo, 1); + // GPU_shader_uniform_buffer(shgroup->shader, uni->location, ubo); + glUniformBlockBinding(GPU_shader_get_program(shgroup->shader), uni->location, 1); break; case DRW_UNIFORM_RESOURCE_CHUNK: state->chunkid_loc = uni->location; @@ -1022,7 +1024,7 @@ static void draw_update_uniforms(DRWShadingGroup *shgroup, } } - BLI_assert(ubo_bindings_validate(shgroup)); + // BLI_assert(ubo_bindings_validate(shgroup)); } BLI_INLINE void draw_select_buffer(DRWShadingGroup *shgroup, @@ -1109,11 +1111,15 @@ static void draw_call_resource_bind(DRWCommandsState *state, const DRWResourceHa GPU_shader_uniform_int(NULL, state->chunkid_loc, chunk); } if (state->obmats_loc != -1) { - GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); + if (state->resource_chunk >= 0) { + GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); + } GPU_uniformbuffer_bind(DST.vmempool->matrices_ubo[chunk], 0); } if (state->obinfos_loc != -1) { - GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]); + if (state->resource_chunk >= 0) { + GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]); + } GPU_uniformbuffer_bind(DST.vmempool->obinfos_ubo[chunk], 1); } state->resource_chunk = chunk; @@ -1181,7 +1187,7 @@ static void draw_call_single_do(DRWShadingGroup *shgroup, static void draw_call_batching_start(DRWCommandsState *state) { state->neg_scale = false; - state->resource_chunk = 0; + state->resource_chunk = -1; state->resource_id = -1; state->base_inst = 0; state->inst_count = 0; @@ -1243,10 +1249,14 @@ static void draw_call_batching_finish(DRWShadingGroup *shgroup, DRWCommandsState glFrontFace(DST.view_active->is_inverted ? GL_CW : GL_CCW); } if (state->obmats_loc != -1) { - GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); + if (state->resource_chunk >= 0) { + GPU_uniformbuffer_unbind(DST.vmempool->matrices_ubo[state->resource_chunk]); + } } if (state->obinfos_loc != -1) { - GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]); + if (state->resource_chunk >= 0) { + GPU_uniformbuffer_unbind(DST.vmempool->obinfos_ubo[state->resource_chunk]); + } } } @@ -1255,6 +1265,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) BLI_assert(shgroup->shader); DRWCommandsState state = { + .resource_chunk = -1, .obmats_loc = -1, .obinfos_loc = -1, .baseinst_loc = -1,