diff options
-rw-r--r-- | release/scripts/ui/space_node.py | 3 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 33 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 2 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 14 |
4 files changed, 48 insertions, 4 deletions
diff --git a/release/scripts/ui/space_node.py b/release/scripts/ui/space_node.py index e37f6ffe4ae..e7cfdb2688d 100644 --- a/release/scripts/ui/space_node.py +++ b/release/scripts/ui/space_node.py @@ -68,6 +68,9 @@ class NODE_HT_header(bpy.types.Header): layout.prop(scene, "use_nodes") layout.prop(scene.render, "use_free_unused_nodes", text="Free Unused") layout.prop(snode, "show_backdrop") + if snode.show_backdrop: + row = layout.row(align=True) + row.prop(snode, "backdrop_channels", text="", expand=True) layout.separator() diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 4590cfe7442..a17fceb4fff 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -44,6 +44,7 @@ #include "BKE_context.h" #include "BKE_curve.h" +#include "BKE_global.h" #include "BKE_image.h" #include "BKE_library.h" #include "BKE_main.h" @@ -1367,9 +1368,35 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage) } if(ibuf->rect) { - glPixelZoom(snode->zoom, snode->zoom); - glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); - glPixelZoom(1.0f, 1.0f); + if (snode->flag & SNODE_SHOW_ALPHA) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glPixelZoom(snode->zoom, snode->zoom); + /* swap bytes, so alpha is most significant one, then just draw it as luminance int */ + if(ENDIAN_ORDER == B_ENDIAN) + glPixelStorei(GL_UNPACK_SWAP_BYTES, 1); + + glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_LUMINANCE, GL_UNSIGNED_INT, ibuf->rect); + + glPixelStorei(GL_UNPACK_SWAP_BYTES, 0); + glPixelZoom(1.0f, 1.0f); + glDisable(GL_BLEND); + } else if (snode->flag & SNODE_USE_ALPHA) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glPixelZoom(snode->zoom, snode->zoom); + + glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + + glPixelZoom(1.0f, 1.0f); + glDisable(GL_BLEND); + } else { + glPixelZoom(snode->zoom, snode->zoom); + + glaDrawPixelsSafe(x, y, ibuf->x, ibuf->y, ibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect); + + glPixelZoom(1.0f, 1.0f); + } } glMatrixMode(GL_PROJECTION); diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 9238f52a615..e2b61020868 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -405,6 +405,8 @@ typedef struct SpaceNode { /* snode->flag */ #define SNODE_BACKDRAW 2 #define SNODE_DISPGP 4 +#define SNODE_USE_ALPHA 8 +#define SNODE_SHOW_ALPHA 16 /* snode->texfrom */ #define SNODE_TEX_OBJECT 0 diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 8b3734a7c46..8cf0d94d03e 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -2267,7 +2267,13 @@ static void rna_def_space_node(BlenderRNA *brna) {SNODE_TEX_WORLD, "WORLD", ICON_WORLD_DATA, "World", "Edit texture nodes from World"}, {SNODE_TEX_BRUSH, "BRUSH", ICON_BRUSH_DATA, "Brush", "Edit texture nodes from Brush"}, {0, NULL, 0, NULL, NULL}}; - + + static EnumPropertyItem backdrop_channels_items[] = { + {0, "COLOR", ICON_IMAGE_RGB, "Color", "Draw image with RGB colors"}, + {SNODE_USE_ALPHA, "COLOR_ALPHA", ICON_IMAGE_RGB_ALPHA, "Color and Alpha", "Draw image with RGB colors and alpha transparency"}, + {SNODE_SHOW_ALPHA, "ALPHA", ICON_IMAGE_ALPHA, "Alpha", "Draw alpha transparency channel"}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "SpaceNodeEditor", "Space"); RNA_def_struct_sdna(srna, "SpaceNode"); RNA_def_struct_ui_text(srna, "Space Node Editor", "Node editor space data"); @@ -2317,6 +2323,12 @@ static void rna_def_space_node(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "yof"); RNA_def_property_ui_text(prop, "Backdrop Y", "Backdrop Y offset"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL); + + prop= RNA_def_property(srna, "backdrop_channels", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag"); + RNA_def_property_enum_items(prop, backdrop_channels_items); + RNA_def_property_ui_text(prop, "Draw Channels", "Channels of the image to draw"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NODE_VIEW, NULL); } static void rna_def_space_logic(BlenderRNA *brna) |