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-07-19 15:38:03 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-07-19 15:38:09 +0300
commitd5c0a02f8677211e4857c9d446b23c8561defb62 (patch)
tree4b2fe26151f9f2e020364c4392bfec185b1a5c2e /source/blender/draw/engines/eevee/eevee_materials.c
parent69ba3b98e4dc84e40fcb623fcdbc7214361466e7 (diff)
Fix T67033 EEVEE: Random Flickering Materials
This was a read after free error. This only fix the undefined behavior. The result is still not correct in certain cases (see T67226). We want to include this for 2.80
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_materials.c')
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index f5f3a7a70e3..61da9e21cc8 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -1659,14 +1659,17 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
char *name = auto_layer_names;
for (int j = 0; j < auto_layer_count; ++j) {
/* TODO don't add these uniform when not needed (default pass shaders). */
+ /* FIXME: This is broken, as it overrides any autolayers srgb bool of the previous mesh
+ * that shares the same material. */
if (shgrp_array[i]) {
- DRW_shgroup_uniform_bool(shgrp_array[i], name, &auto_layer_is_srgb[j], 1);
+ DRW_shgroup_uniform_bool_copy(shgrp_array[i], name, auto_layer_is_srgb[j]);
}
if (shgrp_depth_array[i]) {
- DRW_shgroup_uniform_bool(shgrp_depth_array[i], name, &auto_layer_is_srgb[j], 1);
+ DRW_shgroup_uniform_bool_copy(shgrp_depth_array[i], name, auto_layer_is_srgb[j]);
}
if (shgrp_depth_clip_array[i]) {
- DRW_shgroup_uniform_bool(shgrp_depth_clip_array[i], name, &auto_layer_is_srgb[j], 1);
+ DRW_shgroup_uniform_bool_copy(
+ shgrp_depth_clip_array[i], name, auto_layer_is_srgb[j]);
}
/* Go to next layer name. */
while (*name != '\0') {