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>2017-09-12 16:06:07 +0300
committerClément Foucault <foucault.clem@gmail.com>2017-09-12 16:06:07 +0300
commitfc42063d1e23242f52dd92a7f81ce091c3f2e20f (patch)
tree6789553114d88ad12baca5960a347f888978a5d8 /source/blender/draw/intern
parent1e1d34654b4d314bfd4925557f6378455df88a61 (diff)
Eevee: Fix wrong shadow Orco mapping.
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h3
-rw-r--r--source/blender/draw/intern/draw_manager.c8
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) */