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-11 15:42:26 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-05-14 11:57:03 +0300
commitad0e95688d254abee315622ebdc3aeb0d2ba979d (patch)
treefe08a1fdd16b3bdd4e9e645b4a8f3e39a5856066 /source/blender/draw/intern
parent2d28df783a029ee5b64da005b2fa400e4e8de976 (diff)
Cleanup: DRW: Remove pointers to materials
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h7
-rw-r--r--source/blender/draw/intern/draw_manager.h16
-rw-r--r--source/blender/draw/intern/draw_manager_data.c21
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c12
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(