Blender  V3.3
draw_view_data.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2021 Blender Foundation. */
3 
11 #pragma once
12 
13 #define GPU_INFO_SIZE 512 /* IMA_MAX_RENDER_TEXT */
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
20 struct DrawEngineType;
21 struct GPUViewport;
22 
23 /* NOTE: these structs are only here for reading the actual lists from the engine.
24  * The actual length of them is stored in a ViewportEngineData_Info.
25  * The length of 1 is just here to avoid compiler warning. */
26 typedef struct FramebufferList {
29 
30 typedef struct TextureList {
31  struct GPUTexture *textures[1];
33 
34 typedef struct PassList {
35  struct DRWPass *passes[1];
37 
38 /* Stores custom structs from the engine that have been MEM_(m/c)allocN'ed. */
39 typedef struct StorageList {
40  void *storage[1];
42 
43 typedef struct ViewportEngineData {
44  /* Not owning pointer to the draw engine. */
46 
56 
58 
59  /* we may want to put this elsewhere */
61 
62  /* Profiling data */
63  double init_time;
64  double render_time;
67 
68 typedef struct ViewportEngineData_Info {
69  int fbl_len;
70  int txl_len;
71  int psl_len;
72  int stl_len;
74 
75 /* Buffer and textures used by the viewport by default */
76 typedef struct DefaultFramebufferList {
84 
85 typedef struct DefaultTextureList {
86  struct GPUTexture *color;
88  struct GPUTexture *depth;
91 
92 typedef struct DRWViewData DRWViewData;
93 
100 void DRW_view_data_free(DRWViewData *view_data);
101 
103  struct GPUViewport *viewport);
104 void DRW_view_data_texture_list_size_validate(DRWViewData *view_data, const int size[2]);
106  struct DrawEngineType *engine_type_);
107 void DRW_view_data_use_engine(DRWViewData *view_data, struct DrawEngineType *engine_type);
108 void DRW_view_data_reset(DRWViewData *view_data);
109 void DRW_view_data_free_unused(DRWViewData *view_data);
110 double *DRW_view_data_cache_time_get(DRWViewData *view_data);
113 
114 typedef struct DRWEngineIterator {
115  int id, end;
118 
119 /* Iterate over used engines of this view_data. */
122 
123 #define DRW_ENABLED_ENGINE_ITER(view_data_, engine_, data_) \
124  DRWEngineIterator iterator; \
125  ViewportEngineData *data_; \
126  struct DrawEngineType *engine_; \
127  DRW_view_data_enabled_engine_iter_begin(&iterator, view_data_); \
128  /* WATCH Comma operator trickery ahead! This tests engine_ == NULL. */ \
129  while ((data_ = DRW_view_data_enabled_engine_iter_step(&iterator), \
130  engine_ = (data_ != NULL) ? (struct DrawEngineType *)data_->engine_type->draw_engine : \
131  NULL))
132 
133 #ifdef __cplusplus
134 }
135 #endif
struct GPUFrameBuffer GPUFrameBuffer
struct GPUTexture GPUTexture
Definition: GPU_texture.h:17
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
struct ViewportEngineData_Info ViewportEngineData_Info
ViewportEngineData * DRW_view_data_enabled_engine_iter_step(DRWEngineIterator *iterator)
DRWViewData * DRW_view_data_create(ListBase *engine_types)
void DRW_view_data_free(DRWViewData *view_data)
DefaultTextureList * DRW_view_data_default_texture_list_get(DRWViewData *view_data)
struct DRWEngineIterator DRWEngineIterator
double * DRW_view_data_cache_time_get(DRWViewData *view_data)
void DRW_view_data_enabled_engine_iter_begin(DRWEngineIterator *iterator, DRWViewData *view_data)
struct PassList PassList
struct FramebufferList FramebufferList
DefaultFramebufferList * DRW_view_data_default_framebuffer_list_get(DRWViewData *view_data)
struct DefaultFramebufferList DefaultFramebufferList
#define GPU_INFO_SIZE
ViewportEngineData * DRW_view_data_engine_data_get_ensure(DRWViewData *view_data, struct DrawEngineType *engine_type_)
void DRW_view_data_use_engine(DRWViewData *view_data, struct DrawEngineType *engine_type)
struct ViewportEngineData ViewportEngineData
struct DefaultTextureList DefaultTextureList
struct StorageList StorageList
void DRW_view_data_texture_list_size_validate(DRWViewData *view_data, const int size[2])
void DRW_view_data_reset(DRWViewData *view_data)
void DRW_view_data_free_unused(DRWViewData *view_data)
struct TextureList TextureList
void DRW_view_data_default_lists_from_viewport(DRWViewData *view_data, struct GPUViewport *viewport)
ViewportEngineData ** engines
struct GPUFrameBuffer * overlay_only_fb
struct GPUFrameBuffer * in_front_fb
struct GPUFrameBuffer * depth_only_fb
struct GPUFrameBuffer * overlay_fb
struct GPUFrameBuffer * default_fb
struct GPUFrameBuffer * color_only_fb
struct GPUTexture * depth
struct GPUTexture * depth_in_front
struct GPUTexture * color_overlay
struct GPUTexture * color
struct GPUFrameBuffer * framebuffers[1]
struct DRWPass * passes[1]
void * storage[1]
struct GPUTexture * textures[1]
TextureList * txl
FramebufferList * fbl
void * instance_data
Memory block that can be freely used by the draw engine. When used the draw engine must implement Dra...
StorageList * stl
struct DRWRegisteredDrawEngine * engine_type
struct DRWTextStore * text_draw_cache
char info[GPU_INFO_SIZE]