diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-09-12 16:06:07 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-09-12 16:06:07 +0300 |
commit | fc42063d1e23242f52dd92a7f81ce091c3f2e20f (patch) | |
tree | 6789553114d88ad12baca5960a347f888978a5d8 /source/blender/draw/intern | |
parent | 1e1d34654b4d314bfd4925557f6378455df88a61 (diff) |
Eevee: Fix wrong shadow Orco mapping.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 3 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 8 |
2 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index 00f822d6877..4b0bbc3c175 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -270,7 +270,8 @@ typedef enum { DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass); DRWShadingGroup *DRW_shgroup_material_create(struct GPUMaterial *material, DRWPass *pass); -DRWShadingGroup *DRW_shgroup_material_instance_create(struct GPUMaterial *material, DRWPass *pass, struct Gwn_Batch *geom); +DRWShadingGroup *DRW_shgroup_material_instance_create( + struct GPUMaterial *material, DRWPass *pass, struct Gwn_Batch *geom, struct Object *ob); DRWShadingGroup *DRW_shgroup_instance_create(struct GPUShader *shader, DRWPass *pass, struct Gwn_Batch *geom); DRWShadingGroup *DRW_shgroup_point_batch_create(struct GPUShader *shader, DRWPass *pass); DRWShadingGroup *DRW_shgroup_line_batch_create(struct GPUShader *shader, DRWPass *pass); diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 79e65b1ed72..a7025c0dd0e 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -284,6 +284,7 @@ struct DRWShadingGroup { DRWState state_extra_disable; /* State changes for this batch only (and'd with the pass's state) */ int type; + ID *instance_data; /* Object->data to instance */ Gwn_Batch *instance_geom; /* Geometry to instance */ Gwn_Batch *batch_geom; /* Result of call batching */ @@ -757,6 +758,7 @@ DRWShadingGroup *DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass) shgroup->state_extra_disable = ~0x0; shgroup->batch_geom = NULL; shgroup->instance_geom = NULL; + shgroup->instance_data = NULL; #ifdef USE_MEM_ITER shgroup->calls = BLI_memiter_create(BLI_MEMITER_DEFAULT_SIZE); @@ -840,13 +842,15 @@ DRWShadingGroup *DRW_shgroup_material_create(struct GPUMaterial *material, DRWPa return grp; } -DRWShadingGroup *DRW_shgroup_material_instance_create(struct GPUMaterial *material, DRWPass *pass, Gwn_Batch *geom) +DRWShadingGroup *DRW_shgroup_material_instance_create( + struct GPUMaterial *material, DRWPass *pass, Gwn_Batch *geom, Object *ob) { DRWShadingGroup *shgroup = DRW_shgroup_material_create(material, pass); if (shgroup) { shgroup->type = DRW_SHG_INSTANCE; shgroup->instance_geom = geom; + shgroup->instance_data = ob->data; } return shgroup; @@ -1971,7 +1975,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state) (interface->instance_count > 0 || interface->instance_batch != NULL)) { GPU_SELECT_LOAD_IF_PICKSEL_LIST(&shgroup->calls); - draw_geometry(shgroup, shgroup->instance_geom, obmat, NULL); + draw_geometry(shgroup, shgroup->instance_geom, obmat, shgroup->instance_data); } else { /* Some dynamic batch can have no geom (no call to aggregate) */ |