diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2019-05-11 15:42:26 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2019-05-14 11:57:03 +0300 |
commit | ad0e95688d254abee315622ebdc3aeb0d2ba979d (patch) | |
tree | fe08a1fdd16b3bdd4e9e645b4a8f3e39a5856066 /source/blender/draw/intern | |
parent | 2d28df783a029ee5b64da005b2fa400e4e8de976 (diff) |
Cleanup: DRW: Remove pointers to materials
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 7 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.h | 16 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 21 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 12 |
4 files changed, 23 insertions, 33 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 38458dd48f0..6f9f15a7aba 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -421,16 +421,14 @@ void DRW_shgroup_call_procedural_triangles_add(DRWShadingGroup *shgroup, void DRW_shgroup_call_object_add_ex(DRWShadingGroup *shgroup, struct GPUBatch *geom, struct Object *ob, - struct Material *ma, bool bypass_culling); #define DRW_shgroup_call_object_add(shgroup, geom, ob) \ - DRW_shgroup_call_object_add_ex(shgroup, geom, ob, NULL, false) + DRW_shgroup_call_object_add_ex(shgroup, geom, ob, false) #define DRW_shgroup_call_object_add_no_cull(shgroup, geom, ob) \ - DRW_shgroup_call_object_add_ex(shgroup, geom, ob, NULL, true) + DRW_shgroup_call_object_add_ex(shgroup, geom, ob, true) void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup, struct GPUBatch *geom, struct Object *ob, - struct Material *ma, DRWCallVisibilityFn *callback, void *user_data); @@ -440,7 +438,6 @@ void DRW_shgroup_call_sculpt_add(DRWShadingGroup *shading_group, bool use_mask, bool use_vert_color); void DRW_shgroup_call_sculpt_with_materials_add(DRWShadingGroup **shgroups, - Material **materials, Object *ob, bool use_vcol); diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h index 20dfe8bc057..d4a5c4b996b 100644 --- a/source/blender/draw/intern/draw_manager.h +++ b/source/blender/draw/intern/draw_manager.h @@ -100,9 +100,9 @@ enum { /* Used by DRWCallState.matflag */ enum { DRW_CALL_MODELINVERSE = (1 << 0), - DRW_CALL_MODELVIEWPROJECTION = (1 << 3), - DRW_CALL_ORCOTEXFAC = (1 << 7), - DRW_CALL_OBJECTINFO = (1 << 8), + DRW_CALL_MODELVIEWPROJECTION = (1 << 1), + DRW_CALL_ORCOTEXFAC = (1 << 2), + DRW_CALL_OBJECTINFO = (1 << 3), }; typedef struct DRWCallState { @@ -110,8 +110,9 @@ typedef struct DRWCallState { void *user_data; uchar flag; - uchar cache_id; /* Compared with DST.state_cache_id to see if matrices are still valid. */ - uint16_t matflag; /* Which matrices to compute. */ + uchar cache_id; /* Compared with DST.state_cache_id to see if matrices are still valid. */ + uchar matflag; /* Which matrices to compute. */ + short ob_index; /* Culling: Using Bounding Sphere for now for faster culling. * Not ideal for planes. */ BoundSphere bsphere; @@ -120,7 +121,7 @@ typedef struct DRWCallState { float modelinverse[4][4]; float modelviewprojection[4][4]; float orcotexfac[2][3]; /* Not view dependent */ - float objectinfo[2]; + float ob_random; } DRWCallState; typedef enum { @@ -141,7 +142,6 @@ typedef struct DRWCall { union { struct { /* type == DRW_CALL_SINGLE */ GPUBatch *geometry; - short ma_index; } single; struct { /* type == DRW_CALL_RANGE */ GPUBatch *geometry; @@ -250,7 +250,7 @@ struct DRWShadingGroup { int orcotexfac; int callid; int objectinfo; - uint16_t matflag; /* Matrices needed, same as DRWCall.flag */ + uchar matflag; /* Matrices needed, same as DRWCall.flag */ DRWPass *pass_parent; /* backlink to pass we're in */ #ifndef NDEBUG diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index 5d5e81ebbe2..0eac9512d0f 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -386,7 +386,7 @@ static void drw_call_state_update_matflag(DRWCallState *state, } if (new_flags & DRW_CALL_OBJECTINFO) { - state->objectinfo[0] = ob ? ob->index : 0; + state->ob_index = ob ? ob->index : 0; uint random; if (DST.dupli_source) { random = DST.dupli_source->random_id; @@ -394,7 +394,7 @@ static void drw_call_state_update_matflag(DRWCallState *state, else { random = BLI_hash_int_2d(BLI_hash_string(ob->id.name + 2), 0); } - state->objectinfo[1] = random * (1.0f / (float)0xFFFFFFFF); + state->ob_random = random * (1.0f / (float)0xFFFFFFFF); } } @@ -528,8 +528,10 @@ void DRW_shgroup_call_procedural_triangles_add(DRWShadingGroup *shgroup, } /* These calls can be culled and are optimized for redraw */ -void DRW_shgroup_call_object_add_ex( - DRWShadingGroup *shgroup, GPUBatch *geom, Object *ob, Material *ma, bool bypass_culling) +void DRW_shgroup_call_object_add_ex(DRWShadingGroup *shgroup, + GPUBatch *geom, + Object *ob, + bool bypass_culling) { BLI_assert(geom != NULL); BLI_assert(ELEM(shgroup->type, DRW_SHG_NORMAL, DRW_SHG_FEEDBACK_TRANSFORM)); @@ -542,7 +544,6 @@ void DRW_shgroup_call_object_add_ex( call->state->flag |= (bypass_culling) ? DRW_CALL_BYPASS_CULLING : 0; call->type = DRW_CALL_SINGLE; call->single.geometry = geom; - call->single.ma_index = ma ? ma->index : 0; #ifdef USE_GPU_SELECT call->select_id = DST.select_id; #endif @@ -551,7 +552,6 @@ void DRW_shgroup_call_object_add_ex( void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup, GPUBatch *geom, Object *ob, - Material *ma, DRWCallVisibilityFn *callback, void *user_data) { @@ -566,7 +566,6 @@ void DRW_shgroup_call_object_add_with_callback(DRWShadingGroup *shgroup, call->state->user_data = user_data; call->type = DRW_CALL_SINGLE; call->single.geometry = geom; - call->single.ma_index = ma ? ma->index : 0; #ifdef USE_GPU_SELECT call->select_id = DST.select_id; #endif @@ -618,7 +617,6 @@ void DRW_shgroup_call_object_instances_add(DRWShadingGroup *shgroup, typedef struct DRWSculptCallbackData { Object *ob; DRWShadingGroup **shading_groups; - Material **materials; bool use_wire; bool use_mats; bool use_mask; @@ -646,7 +644,6 @@ static float sculpt_debug_colors[9][4] = { static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers) { GPUBatch *geom = GPU_pbvh_buffers_batch_get(buffers, scd->fast_mode, scd->use_wire); - Material *ma = NULL; short index = 0; /* Meh... use_mask is a bit misleading here. */ @@ -656,7 +653,6 @@ static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers if (scd->use_mats) { index = GPU_pbvh_buffers_material_index_get(buffers); - ma = scd->materials[index]; } DRWShadingGroup *shgrp = scd->shading_groups[index]; @@ -668,7 +664,7 @@ static void sculpt_draw_cb(DRWSculptCallbackData *scd, GPU_PBVH_Buffers *buffers #endif /* DRW_shgroup_call_object_add_ex reuses matrices calculations for all the drawcalls of this * object. */ - DRW_shgroup_call_object_add_ex(shgrp, geom, scd->ob, ma, true); + DRW_shgroup_call_object_add_ex(shgrp, geom, scd->ob, true); } } @@ -735,7 +731,6 @@ void DRW_shgroup_call_sculpt_add( DRWSculptCallbackData scd = { .ob = ob, .shading_groups = &shgroup, - .materials = NULL, .use_wire = use_wire, .use_mats = false, .use_mask = use_mask, @@ -744,14 +739,12 @@ void DRW_shgroup_call_sculpt_add( } void DRW_shgroup_call_sculpt_with_materials_add(DRWShadingGroup **shgroups, - Material **materials, Object *ob, bool use_vcol) { DRWSculptCallbackData scd = { .ob = ob, .shading_groups = shgroups, - .materials = materials, .use_wire = false, .use_mats = true, .use_mask = false, diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index efea155d35d..a1532243381 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -818,12 +818,12 @@ static void draw_geometry_prepare(DRWShadingGroup *shgroup, DRWCall *call) (float *)state->modelviewprojection); } if (shgroup->objectinfo != -1) { - float objectinfo[4]; - objectinfo[0] = state->objectinfo[0]; - objectinfo[1] = call->single.ma_index; /* WATCH this is only valid for single drawcalls. */ - objectinfo[2] = state->objectinfo[1]; - objectinfo[3] = (state->flag & DRW_CALL_NEGSCALE) ? -1.0f : 1.0f; - GPU_shader_uniform_vector(shgroup->shader, shgroup->objectinfo, 4, 1, (float *)objectinfo); + float infos[4]; + infos[0] = state->ob_index; + // infos[1]; /* UNUSED. */ + infos[2] = state->ob_random; + infos[3] = (state->flag & DRW_CALL_NEGSCALE) ? -1.0f : 1.0f; + GPU_shader_uniform_vector(shgroup->shader, shgroup->objectinfo, 4, 1, (float *)infos); } if (shgroup->orcotexfac != -1) { GPU_shader_uniform_vector( |