Eevee: Fix wrong shadow Orco mapping.
This commit is contained in:
parent
1e1d34654b
commit
fc42063d1e
|
@ -320,9 +320,10 @@ void EEVEE_lights_cache_shcaster_add(EEVEE_SceneLayerData *sldata, EEVEE_PassLis
|
|||
}
|
||||
|
||||
void EEVEE_lights_cache_shcaster_material_add(
|
||||
EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, struct GPUMaterial *gpumat, struct Gwn_Batch *geom, float (*obmat)[4], float *alpha_threshold)
|
||||
EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, struct GPUMaterial *gpumat,
|
||||
struct Gwn_Batch *geom, struct Object *ob, float (*obmat)[4], float *alpha_threshold)
|
||||
{
|
||||
DRWShadingGroup *grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cube_pass, geom);
|
||||
DRWShadingGroup *grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cube_pass, geom, ob);
|
||||
|
||||
if (grp == NULL) return;
|
||||
|
||||
|
@ -335,7 +336,7 @@ void EEVEE_lights_cache_shcaster_material_add(
|
|||
for (int i = 0; i < 6; ++i)
|
||||
DRW_shgroup_call_dynamic_add_empty(grp);
|
||||
|
||||
grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cascade_pass, geom);
|
||||
grp = DRW_shgroup_material_instance_create(gpumat, psl->shadow_cascade_pass, geom, ob);
|
||||
DRW_shgroup_uniform_block(grp, "shadow_render_block", sldata->shadow_render_ubo);
|
||||
DRW_shgroup_uniform_mat4(grp, "ShadowModelMatrix", (float *)obmat);
|
||||
|
||||
|
|
|
@ -1247,11 +1247,11 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_SceneLayerData *sl
|
|||
break;
|
||||
case MA_BS_CLIP:
|
||||
gpumat = EEVEE_material_mesh_depth_get(scene, ma, false, true);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob->obmat, &ma->alpha_threshold);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, &ma->alpha_threshold);
|
||||
break;
|
||||
case MA_BS_HASHED:
|
||||
gpumat = EEVEE_material_mesh_depth_get(scene, ma, true, true);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob->obmat, NULL);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, ob->obmat, NULL);
|
||||
break;
|
||||
case MA_BS_NONE:
|
||||
default:
|
||||
|
|
|
@ -548,10 +548,12 @@ void EEVEE_update_util_texture(float offset);
|
|||
void EEVEE_lights_init(EEVEE_SceneLayerData *sldata);
|
||||
void EEVEE_lights_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl);
|
||||
void EEVEE_lights_cache_add(EEVEE_SceneLayerData *sldata, struct Object *ob);
|
||||
void EEVEE_lights_cache_shcaster_add(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4]);
|
||||
void EEVEE_lights_cache_shcaster_add(
|
||||
EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4]);
|
||||
void EEVEE_lights_cache_shcaster_material_add(
|
||||
EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl,
|
||||
struct GPUMaterial *gpumat, struct Gwn_Batch *geom, float (*obmat)[4], float *alpha_threshold);
|
||||
EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl,
|
||||
struct GPUMaterial *gpumat, struct Gwn_Batch *geom, struct Object *ob,
|
||||
float (*obmat)[4], float *alpha_threshold);
|
||||
void EEVEE_lights_cache_finish(EEVEE_SceneLayerData *sldata);
|
||||
void EEVEE_lights_update(EEVEE_SceneLayerData *sldata);
|
||||
void EEVEE_draw_shadows(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) */
|
||||
|
|
Loading…
Reference in New Issue