Blender V5.0
image_state.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
8
9#pragma once
10
11#include "BKE_image_wrappers.hh"
12
13#include "image_batches.hh"
14#include "image_buffer_cache.hh"
16#include "image_private.hh"
18#include "image_texture_info.hh"
19#include "image_usage.hh"
20
21#include "DRW_render.hh"
22#include "draw_command.hh"
23#include "draw_manager.hh"
24#include "draw_pass.hh"
25
26namespace blender::image_engine {
27using namespace blender::draw;
28
29struct State {
30 ::Image *image = nullptr;
33
35
36 View view = {"Image.View"};
38 struct {
47
48 Framebuffer depth_fb = {"Image.Depth"};
49 Framebuffer color_fb = {"Image.Color"};
50
51 PassSimple depth_ps = {"Image.Depth"};
52 PassSimple image_ps = {"Image.Color"};
53
58
60 float ss_to_texture[4][4];
61
63
64 public:
65 virtual ~State() = default;
66
68 {
69 reset_need_full_update(false);
70 }
72 {
73 reset_need_full_update(true);
74 }
75
77 {
78 for (TextureInfo &info : texture_infos) {
79 BatchUpdater batch_updater(info);
80 batch_updater.update_batch();
81 }
82 }
83
84 void update_image_usage(const ImageUser *image_user)
85 {
86 ImageUsage usage(image, image_user, flags.do_tile_drawing);
87 if (last_usage != usage) {
88 last_usage = usage;
89 reset_need_full_update(true);
90 float_buffers.clear();
91 }
92 }
93
94 private:
96 void reset_need_full_update(bool new_value)
97 {
98 for (TextureInfo &info : texture_infos) {
99 info.need_full_update = new_value;
100 }
101 }
102};
103
104} // namespace blender::image_engine
Create gpu::Batch for a IMAGE_ScreenSpaceTextureInfo.
detail::Pass< command::DrawCommandBuf > PassSimple
Float buffer cache for image buffers.
PartialImageUpdater partial_update
virtual ~State()=default
float ss_to_texture[4][4]
Transform matrix to convert a normalized screen space coordinates to texture space.
FloatBufferCache float_buffers
struct blender::image_engine::State::@110232364342133175060314310051232165173255173333 flags
void update_image_usage(const ImageUser *image_user)
bool do_tile_drawing
should we perform tiled drawing (wrap repeat).
Vector< TextureInfo > texture_infos