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 /source/blender/draw
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.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/image/image_engine.c3
-rw-r--r--source/blender/draw/engines/image/shaders/engine_image_frag.glsl7
2 files changed, 10 insertions, 0 deletions
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;