[Bf-blender-cvs] [f492c8d488b] master: Image Editor: Make Rendering of Pure Emissive Colors Optional

Jeroen Bakker noreply at git.blender.org
Tue Sep 15 12:34:04 CEST 2020


Commit: f492c8d488b7eb2166ca894e10a8128a1678a885
Author: Jeroen Bakker
Date:   Tue Sep 15 12:28:58 2020 +0200
Branches: master
https://developer.blender.org/rBf492c8d488b7eb2166ca894e10a8128a1678a885

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.

===================================================================

M	release/scripts/startup/bl_ui/space_image.py
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/draw/engines/image/image_engine.c
M	source/blender/draw/engines/image/shaders/engine_image_frag.glsl
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_space.c

===================================================================

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);



More information about the Bf-blender-cvs mailing list