Blender V4.3
draw_view_data.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
12#pragma once
13
14#define GPU_INFO_SIZE 512 /* IMA_MAX_RENDER_TEXT_SIZE */
15
16namespace blender::draw {
17class TextureFromPool;
18} // namespace blender::draw
19
20struct DRWPass;
21struct DRWTextStore;
23struct DrawEngineType;
24struct GPUViewport;
25
26/* NOTE: these structs are only here for reading the actual lists from the engine.
27 * The actual length of them is stored in a ViewportEngineData_Info.
28 * The length of 1 is just here to avoid compiler warning. */
30 GPUFrameBuffer *framebuffers[1];
31};
32
34 GPUTexture *textures[1];
35};
36
37struct PassList {
38 DRWPass *passes[1];
39};
40
41/* Stores custom structs from the engine that have been MEM_(m/c)allocN'ed. */
43 void *storage[1];
44};
45
47 /* Not owning pointer to the draw engine. */
49
59
61
62 /* we may want to put this elsewhere */
64
65 /* Profiling data */
66 double init_time;
69};
70
77
78/* Buffer and textures used by the viewport by default */
80 GPUFrameBuffer *default_fb;
81 GPUFrameBuffer *overlay_fb;
82 GPUFrameBuffer *in_front_fb;
83 GPUFrameBuffer *color_only_fb;
84 GPUFrameBuffer *depth_only_fb;
85 GPUFrameBuffer *overlay_only_fb;
86};
87
89 GPUTexture *color;
90 GPUTexture *color_overlay;
91 GPUTexture *depth;
92 GPUTexture *depth_in_front;
93};
94
95struct DRWViewData;
96
103void DRW_view_data_free(DRWViewData *view_data);
104
105/* Returns a TextureFromPool stored in the given view data for the pass identified by the given
106 * pass name. Engines should call call this function for each of the passes needed by the viewport
107 * compositor in every redraw, then it should allocate the texture and write the pass data to it.
108 * The texture should cover the entire viewport. */
110 const char *pass_name);
111
113void DRW_view_data_texture_list_size_validate(DRWViewData *view_data, const int size[2]);
115 DrawEngineType *engine_type);
116void DRW_view_data_use_engine(DRWViewData *view_data, DrawEngineType *engine_type);
117void DRW_view_data_reset(DRWViewData *view_data);
120double *DRW_view_data_cache_time_get(DRWViewData *view_data);
123
128
129/* Iterate over used engines of this view_data. */
132
133#define DRW_ENABLED_ENGINE_ITER(view_data_, engine_, data_) \
134 DRWEngineIterator iterator; \
135 ViewportEngineData *data_; \
136 DrawEngineType *engine_; \
137 DRW_view_data_enabled_engine_iter_begin(&iterator, view_data_); \
138 /* WATCH Comma operator trickery ahead! This tests engine_ == nullptr. */ \
139 while ((data_ = DRW_view_data_enabled_engine_iter_step(&iterator), \
140 engine_ = (data_ != nullptr) ? (DrawEngineType *)data_->engine_type->draw_engine : \
141 nullptr))
void DRW_view_data_use_engine(DRWViewData *view_data, DrawEngineType *engine_type)
void DRW_view_data_free(DRWViewData *view_data)
void DRW_view_data_default_lists_from_viewport(DRWViewData *view_data, GPUViewport *viewport)
DefaultFramebufferList * DRW_view_data_default_framebuffer_list_get(DRWViewData *view_data)
DefaultTextureList * DRW_view_data_default_texture_list_get(DRWViewData *view_data)
void DRW_view_data_enabled_engine_iter_begin(DRWEngineIterator *iterator, DRWViewData *view_data)
void DRW_view_data_engines_view_update(DRWViewData *view_data)
blender::draw::TextureFromPool & DRW_view_data_pass_texture_get(DRWViewData *view_data, const char *pass_name)
ViewportEngineData * DRW_view_data_enabled_engine_iter_step(DRWEngineIterator *iterator)
#define GPU_INFO_SIZE
double * DRW_view_data_cache_time_get(DRWViewData *view_data)
DRWViewData * DRW_view_data_create(ListBase *engine_types)
void DRW_view_data_texture_list_size_validate(DRWViewData *view_data, const int size[2])
void DRW_view_data_reset(DRWViewData *view_data)
ViewportEngineData * DRW_view_data_engine_data_get_ensure(DRWViewData *view_data, DrawEngineType *engine_type)
void DRW_view_data_free_unused(DRWViewData *view_data)
ViewportEngineData ** engines
GPUFrameBuffer * depth_only_fb
GPUFrameBuffer * overlay_fb
GPUFrameBuffer * color_only_fb
GPUFrameBuffer * in_front_fb
GPUFrameBuffer * overlay_only_fb
GPUFrameBuffer * default_fb
GPUTexture * depth_in_front
GPUTexture * color_overlay
GPUFrameBuffer * framebuffers[1]
void * storage[1]
GPUTexture * textures[1]
FramebufferList * fbl
DRWTextStore * text_draw_cache
DRWRegisteredDrawEngine * engine_type
void * instance_data
Memory block that can be freely used by the draw engine. When used the draw engine must implement Dra...
char info[GPU_INFO_SIZE]