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:
authorJeroen Bakker <jeroen@blender.org>2020-09-15 13:28:58 +0300
committerJeroen Bakker <jeroen@blender.org>2020-09-15 13:33:49 +0300
commitf492c8d488b7eb2166ca894e10a8128a1678a885 (patch)
treef340d2d10b7b7f8863c8334d9cbeb6b2f6c4a723
parent60fee7832342195ddeb7c7b712b5a080bfd80f21 (diff)
Image Editor: Make Rendering of Pure Emissive Colors Optional
There are some areas that don't handle pure emissive colors well. For example erasing alpha using 2d or 3d painting. Or blurring an image in the compositor. This patch makes the rendering of pure emissive colors optional. In the side panel of the Image editor it can still be enabled when needed. There currently isn't a better place to store it as it is related on how the image (or a layer of the image) is created. A future design needs to make sure that the full workflow is supported.
-rw-r--r--release/scripts/startup/bl_ui/space_image.py1
-rw-r--r--source/blender/blenloader/intern/versioning_280.c3
-rw-r--r--source/blender/draw/engines/image/image_engine.c3
-rw-r--r--source/blender/draw/engines/image/shaders/engine_image_frag.glsl7
-rw-r--r--source/blender/makesdna/DNA_space_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_space.c5
6 files changed, 19 insertions, 2 deletions
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 0fde128a906..e9a2dbb977b 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -987,6 +987,7 @@ class IMAGE_PT_view_display(Panel):
if ima:
col.prop(ima, "display_aspect", text="Aspect Ratio")
col.prop(sima, "show_repeat", text="Repeat Image")
+ col.prop(sima, "show_pure_emissive_colors")
if show_uvedit:
col.prop(uvedit, "show_pixel_coords", text="Pixel Coordinates")
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 213fbe0bde0..c1fb38a5d87 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3396,8 +3396,9 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
switch (sl->spacetype) {
case SPACE_IMAGE: {
+ const int si_flag_unused_3 = (1 << 3);
SpaceImage *sima = (SpaceImage *)sl;
- sima->flag &= ~(SI_FLAG_UNUSED_0 | SI_FLAG_UNUSED_1 | SI_FLAG_UNUSED_3 |
+ sima->flag &= ~(SI_FLAG_UNUSED_0 | SI_FLAG_UNUSED_1 | si_flag_unused_3 |
SI_FLAG_UNUSED_6 | SI_FLAG_UNUSED_7 | SI_FLAG_UNUSED_8 |
SI_FLAG_UNUSED_17 | SI_FLAG_UNUSED_18 | SI_FLAG_UNUSED_23 |
SI_FLAG_UNUSED_24);
diff --git a/source/blender/draw/engines/image/image_engine.c b/source/blender/draw/engines/image/image_engine.c
index 90bfb38dadf..99c812859c1 100644
--- a/source/blender/draw/engines/image/image_engine.c
+++ b/source/blender/draw/engines/image/image_engine.c
@@ -43,6 +43,7 @@
#define SIMA_DRAW_FLAG_SHUFFLING (1 << 2)
#define SIMA_DRAW_FLAG_DEPTH (1 << 3)
#define SIMA_DRAW_FLAG_DO_REPEAT (1 << 4)
+#define SIMA_DRAW_FLAG_PURE_EMISSIVE (1 << 5)
static void image_cache_image_add(DRWShadingGroup *grp, Image *image)
{
@@ -142,6 +143,7 @@ static void image_cache_image(IMAGE_Data *vedata, Image *image, ImageUser *iuser
const bool is_tiled_texture = tex_tile_data != NULL;
const bool do_repeat = (!is_tiled_texture) && ((sima->flag & SI_DRAW_TILE) != 0);
const bool is_zoom_out = sima->zoom < 1.0f;
+ const bool show_pure_emissive_colors = (sima->flag & SI_SHOW_PURE_EMISSIVE) != 0;
/* use interpolation filtering when zooming out */
eGPUSamplerState state = 0;
@@ -149,6 +151,7 @@ static void image_cache_image(IMAGE_Data *vedata, Image *image, ImageUser *iuser
int draw_flags = 0;
SET_FLAG_FROM_TEST(draw_flags, do_repeat, SIMA_DRAW_FLAG_DO_REPEAT);
+ SET_FLAG_FROM_TEST(draw_flags, show_pure_emissive_colors, SIMA_DRAW_FLAG_PURE_EMISSIVE);
if ((sima->flag & SI_USE_ALPHA) != 0) {
/* Show RGBA */
diff --git a/source/blender/draw/engines/image/shaders/engine_image_frag.glsl b/source/blender/draw/engines/image/shaders/engine_image_frag.glsl
index a79f4915c4d..d4eebb37ccb 100644
--- a/source/blender/draw/engines/image/shaders/engine_image_frag.glsl
+++ b/source/blender/draw/engines/image/shaders/engine_image_frag.glsl
@@ -6,6 +6,7 @@
#define SIMA_DRAW_FLAG_SHUFFLING (1 << 2)
#define SIMA_DRAW_FLAG_DEPTH (1 << 3)
#define SIMA_DRAW_FLAG_DO_REPEAT (1 << 4)
+#define SIMA_DRAW_FLAG_PURE_EMISSIVE (1 << 5)
#ifdef TILED_IMAGE
uniform sampler2DArray imageTileArray;
@@ -74,6 +75,12 @@ void main()
tex_color = texture(imageTexture, uvs_clamped);
#endif
+ if ((drawFlags & SIMA_DRAW_FLAG_PURE_EMISSIVE) == 0) {
+ if (imgPremultiplied && tex_color.a == 0.0) {
+ tex_color.rgb = vec3(0.0);
+ }
+ }
+
if ((drawFlags & SIMA_DRAW_FLAG_APPLY_ALPHA) != 0) {
if (!imgPremultiplied && tex_color.a != 0.0 && tex_color.a != 1.0) {
tex_color.rgb *= tex_color.a;
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 06ab01a9730..66c87c85ffd 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -1131,7 +1131,7 @@ typedef enum eSpaceImage_Flag {
SI_FLAG_UNUSED_0 = (1 << 0), /* cleared */
SI_FLAG_UNUSED_1 = (1 << 1), /* cleared */
SI_CLIP_UV = (1 << 2),
- SI_FLAG_UNUSED_3 = (1 << 3), /* cleared */
+ SI_SHOW_PURE_EMISSIVE = (1 << 3),
SI_NO_DRAWFACES = (1 << 4),
SI_DRAWSHADOW = (1 << 5),
SI_FLAG_UNUSED_6 = (1 << 6), /* cleared */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 317759ce418..6890515b7b3 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -4571,6 +4571,11 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_update(
prop, NC_SPACE | ND_SPACE_IMAGE, "rna_SpaceImageEditor_show_stereo_update");
+ prop = RNA_def_property(srna, "show_pure_emissive_colors", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SI_SHOW_PURE_EMISSIVE);
+ RNA_def_property_ui_text(prop, "Show Pure Emissive", "Display the image with pure emissive colors");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_IMAGE, NULL);
+
/* uv */
prop = RNA_def_property(srna, "uv_editor", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);