EEVEE-Next: Fix float3 passes being incorrect
This commit is contained in:
@@ -620,7 +620,16 @@ float *Film::read_pass(eViewLayerEEVEEPassType pass_type)
|
||||
|
||||
GPU_memory_barrier(GPU_BARRIER_TEXTURE_UPDATE);
|
||||
|
||||
return (float *)GPU_texture_read(pass_tx, GPU_DATA_FLOAT, 0);
|
||||
float *result = (float *)GPU_texture_read(pass_tx, GPU_DATA_FLOAT, 0);
|
||||
|
||||
if (pass_is_float3(pass_type)) {
|
||||
/* Convert result in place as we cannot do this conversion on GPU. */
|
||||
for (auto px : IndexRange(accum_tx.width() * accum_tx.height())) {
|
||||
*(reinterpret_cast<float3 *>(result) + px) = *(reinterpret_cast<float3 *>(result + px * 4));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
@@ -109,6 +109,23 @@ class Film {
|
||||
}
|
||||
}
|
||||
|
||||
static bool pass_is_float3(eViewLayerEEVEEPassType pass_type)
|
||||
{
|
||||
switch (pass_type) {
|
||||
case EEVEE_RENDER_PASS_NORMAL:
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_LIGHT:
|
||||
case EEVEE_RENDER_PASS_DIFFUSE_COLOR:
|
||||
case EEVEE_RENDER_PASS_SPECULAR_LIGHT:
|
||||
case EEVEE_RENDER_PASS_SPECULAR_COLOR:
|
||||
case EEVEE_RENDER_PASS_VOLUME_LIGHT:
|
||||
case EEVEE_RENDER_PASS_EMIT:
|
||||
case EEVEE_RENDER_PASS_ENVIRONMENT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns layer offset in the accumulation texture. -1 if the pass is not enabled. */
|
||||
int pass_id_get(eViewLayerEEVEEPassType pass_type) const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user