Blender V4.3
image_space_node.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "image_private.hh"
12
14
16 SpaceNode *snode;
17
18 public:
19 SpaceNodeAccessor(SpaceNode *snode) : snode(snode) {}
20
21 Image *get_image(Main *bmain) override
22 {
23 return BKE_image_ensure_viewer(bmain, IMA_TYPE_COMPOSITE, "Viewer Node");
24 }
25
27 {
28 return nullptr;
29 }
30
31 ImBuf *acquire_image_buffer(Image *image, void **lock) override
32 {
33 return BKE_image_acquire_ibuf(image, nullptr, lock);
34 }
35
36 void release_buffer(Image *image, ImBuf *ibuf, void *lock) override
37 {
38 BKE_image_release_ibuf(image, ibuf, lock);
39 }
40
41 void get_shader_parameters(ShaderParameters &r_shader_parameters, ImBuf *ibuf) override
42 {
43 if ((snode->flag & SNODE_USE_ALPHA) != 0) {
44 /* Show RGBA */
46 }
47 else if ((snode->flag & SNODE_SHOW_ALPHA) != 0) {
48 r_shader_parameters.flags |= ImageDrawFlags::Shuffling;
49 copy_v4_fl4(r_shader_parameters.shuffle, 0.0f, 0.0f, 0.0f, 1.0f);
50 }
51 else if ((snode->flag & SNODE_SHOW_R) != 0) {
52 r_shader_parameters.flags |= ImageDrawFlags::Shuffling;
53 if (IMB_alpha_affects_rgb(ibuf)) {
54 r_shader_parameters.flags |= ImageDrawFlags::ApplyAlpha;
55 }
56 copy_v4_fl4(r_shader_parameters.shuffle, 1.0f, 0.0f, 0.0f, 0.0f);
57 }
58 else if ((snode->flag & SNODE_SHOW_G) != 0) {
59 r_shader_parameters.flags |= ImageDrawFlags::Shuffling;
60 if (IMB_alpha_affects_rgb(ibuf)) {
61 r_shader_parameters.flags |= ImageDrawFlags::ApplyAlpha;
62 }
63 copy_v4_fl4(r_shader_parameters.shuffle, 0.0f, 1.0f, 0.0f, 0.0f);
64 }
65 else if ((snode->flag & SNODE_SHOW_B) != 0) {
66 r_shader_parameters.flags |= ImageDrawFlags::Shuffling;
67 if (IMB_alpha_affects_rgb(ibuf)) {
68 r_shader_parameters.flags |= ImageDrawFlags::ApplyAlpha;
69 }
70 copy_v4_fl4(r_shader_parameters.shuffle, 0.0f, 0.0f, 1.0f, 0.0f);
71 }
72 else /* RGB */ {
73 if (IMB_alpha_affects_rgb(ibuf)) {
74 r_shader_parameters.flags |= ImageDrawFlags::ApplyAlpha;
75 }
76 }
77 }
78
79 bool use_tile_drawing() const override
80 {
81 return false;
82 }
83
89 const float image_offset[2],
90 const float image_resolution[2],
91 float r_uv_to_texture[4][4]) const override
92 {
93 unit_m4(r_uv_to_texture);
94 float display_resolution[2];
95 float image_display_offset[2];
96 mul_v2_v2fl(display_resolution, image_resolution, snode->zoom);
97 mul_v2_v2fl(image_display_offset, image_offset, snode->zoom);
98 const float scale_x = display_resolution[0] / region->winx;
99 const float scale_y = display_resolution[1] / region->winy;
100 const float translate_x = ((region->winx - display_resolution[0]) * 0.5f + snode->xof +
101 image_display_offset[0]) /
102 region->winx;
103 const float translate_y = ((region->winy - display_resolution[1]) * 0.5f + snode->yof +
104 image_display_offset[1]) /
105 region->winy;
106
107 r_uv_to_texture[0][0] = scale_x;
108 r_uv_to_texture[1][1] = scale_y;
109 r_uv_to_texture[3][0] = translate_x;
110 r_uv_to_texture[3][1] = translate_y;
111 }
112};
113
114} // namespace blender::draw::image_engine
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
Image * BKE_image_ensure_viewer(Main *bmain, int type, const char *name)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void unit_m4(float m[4][4])
Definition rct.c:1127
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
@ IMA_TYPE_COMPOSITE
@ SNODE_USE_ALPHA
@ SNODE_SHOW_B
@ SNODE_SHOW_G
@ SNODE_SHOW_R
@ SNODE_SHOW_ALPHA
bool IMB_alpha_affects_rgb(const ImBuf *ibuf)
Definition divers.cc:91
volatile int lock
void get_shader_parameters(ShaderParameters &r_shader_parameters, ImBuf *ibuf) override
bool use_tile_drawing() const override
Is (wrap) repeat option enabled in the space.
void release_buffer(Image *image, ImBuf *ibuf, void *lock) override
ImBuf * acquire_image_buffer(Image *image, void **lock) override
void init_ss_to_texture_matrix(const ARegion *region, const float image_offset[2], const float image_resolution[2], float r_uv_to_texture[4][4]) const override