Blender V4.3
DRW_render.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2016 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9/* This is the Render Functions used by Realtime engines to draw with OpenGL */
10
11#pragma once
12
13#include "BLI_listbase.h"
14#include "BLI_math_matrix.h"
15#include "BLI_math_vector.h"
16#include "BLI_string.h"
17
18#include "BKE_context.hh"
19#include "BKE_layer.hh"
20#include "BKE_material.h"
21#include "BKE_pbvh.hh"
22#include "BKE_scene.hh"
23
24#include "BLT_translation.hh"
25
26#include "DNA_light_types.h"
27#include "DNA_material_types.h"
28#include "DNA_object_types.h"
29#include "DNA_scene_types.h"
30#include "DNA_world_types.h"
31
32#include "GPU_framebuffer.hh"
33#include "GPU_material.hh"
34#include "GPU_primitive.hh"
35#include "GPU_shader.hh"
36#include "GPU_storage_buffer.hh"
37#include "GPU_texture.hh"
38#include "GPU_uniform_buffer.hh"
39
40#include "draw_cache.hh"
41#include "draw_common_c.hh"
42#include "draw_view_c.hh"
43
44#include "draw_debug_c.hh"
46#include "draw_state.hh"
47#include "draw_view_data.hh"
48
49#include "MEM_guardedalloc.h"
50
51#include "RE_engine.h"
52
53#include "DEG_depsgraph.hh"
54
55/* Uncomment to track unused resource bindings. */
56// #define DRW_UNUSED_RESOURCE_TRACKING
57
58#ifdef DRW_UNUSED_RESOURCE_TRACKING
59# define DRW_DEBUG_FILE_LINE_ARGS , const char *file, int line
60#else
61# define DRW_DEBUG_FILE_LINE_ARGS
62#endif
63
64namespace blender::gpu {
65class Batch;
66}
67struct GPUMaterial;
68struct GPUShader;
69struct GPUTexture;
70struct GPUUniformBuf;
71struct Object;
72struct ParticleSystem;
73struct RenderEngineType;
74struct bContext;
75struct rcti;
76struct TaskGraph;
77namespace blender::draw {
78class TextureFromPool;
79struct DRW_Attributes;
80struct DRW_MeshCDMask;
81} // namespace blender::draw
82
85typedef struct DRWPass DRWPass;
88typedef struct DRWUniform DRWUniform;
89typedef struct DRWView DRWView;
90
91/* TODO: Put it somewhere else? */
93 float center[3], radius;
94};
95
96/* declare members as empty (unused) */
98
99#define DRW_VIEWPORT_LIST_SIZE(list) \
100 (sizeof(list) == sizeof(DRWViewportEmptyList) ? 0 : (sizeof(list) / sizeof(void *)))
101
102/* Unused members must be either pass list or 'char *' when not used. */
103#define DRW_VIEWPORT_DATA_SIZE(ty) \
104 { \
105 DRW_VIEWPORT_LIST_SIZE(*(((ty *)nullptr)->fbl)), \
106 DRW_VIEWPORT_LIST_SIZE(*(((ty *)nullptr)->txl)), \
107 DRW_VIEWPORT_LIST_SIZE(*(((ty *)nullptr)->psl)), \
108 DRW_VIEWPORT_LIST_SIZE(*(((ty *)nullptr)->stl)), \
109 }
110
117
120
121 char idname[32];
122
124
125 void (*engine_init)(void *vedata);
126 void (*engine_free)();
127
128 void (*instance_free)(void *instance_data);
129
130 void (*cache_init)(void *vedata);
131 void (*cache_populate)(void *vedata, Object *ob);
132 void (*cache_finish)(void *vedata);
133
134 void (*draw_scene)(void *vedata);
135
136 void (*view_update)(void *vedata);
137 void (*id_update)(void *vedata, ID *id);
138
139 void (*render_to_image)(void *vedata,
140 RenderEngine *engine,
141 RenderLayer *layer,
142 const rcti *rect);
143 void (*store_metadata)(void *vedata, RenderResult *render_result);
144};
145
146/* Textures */
148 DRW_TEX_FILTER = (1 << 0),
149 DRW_TEX_WRAP = (1 << 1),
150 DRW_TEX_COMPARE = (1 << 2),
151 DRW_TEX_MIPMAP = (1 << 3),
152};
153
159GPUTexture *DRW_texture_pool_query_2d(int w,
160 int h,
162 DrawEngineType *engine_type);
164 DrawEngineType *engine_type);
165
166GPUTexture *DRW_texture_create_1d(int w,
168 DRWTextureFlag flags,
169 const float *fpixels);
170GPUTexture *DRW_texture_create_2d(
171 int w, int h, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels);
173 int w, int h, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels);
174GPUTexture *DRW_texture_create_3d(
175 int w, int h, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels);
176GPUTexture *DRW_texture_create_cube(int w,
178 DRWTextureFlag flags,
179 const float *fpixels);
181 int w, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels);
182
183void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex,
185 DRWTextureFlag flags);
187 GPUTexture **tex, int w, int h, eGPUTextureFormat format, DRWTextureFlag flags);
188
189/* Explicit parameter variants. */
191 int w, int h, eGPUTextureFormat format, eGPUTextureUsage usage, DrawEngineType *engine_type);
193 eGPUTextureUsage usage,
194 DrawEngineType *engine_type);
195
196GPUTexture *DRW_texture_create_1d_ex(int w,
198 eGPUTextureUsage usage_flags,
199 DRWTextureFlag flags,
200 const float *fpixels);
201GPUTexture *DRW_texture_create_2d_ex(int w,
202 int h,
204 eGPUTextureUsage usage_flags,
205 DRWTextureFlag flags,
206 const float *fpixels);
207GPUTexture *DRW_texture_create_2d_array_ex(int w,
208 int h,
209 int d,
211 eGPUTextureUsage usage_flags,
212 DRWTextureFlag flags,
213 const float *fpixels);
214GPUTexture *DRW_texture_create_3d_ex(int w,
215 int h,
216 int d,
218 eGPUTextureUsage usage_flags,
219 DRWTextureFlag flags,
220 const float *fpixels);
221GPUTexture *DRW_texture_create_cube_ex(int w,
223 eGPUTextureUsage usage_flags,
224 DRWTextureFlag flags,
225 const float *fpixels);
226GPUTexture *DRW_texture_create_cube_array_ex(int w,
227 int d,
229 eGPUTextureUsage usage_flags,
230 DRWTextureFlag flags,
231 const float *fpixels);
232
235 eGPUTextureUsage usage,
236 DRWTextureFlag flags);
237void DRW_texture_ensure_2d_ex(GPUTexture **tex,
238 int w,
239 int h,
241 eGPUTextureUsage usage,
242 DRWTextureFlag flags);
243
244void DRW_texture_generate_mipmaps(GPUTexture *tex);
245void DRW_texture_free(GPUTexture *tex);
246#define DRW_TEXTURE_FREE_SAFE(tex) \
247 do { \
248 if (tex != nullptr) { \
249 DRW_texture_free(tex); \
250 tex = nullptr; \
251 } \
252 } while (0)
253
254#define DRW_UBO_FREE_SAFE(ubo) \
255 do { \
256 if (ubo != nullptr) { \
257 GPU_uniformbuf_free(ubo); \
258 ubo = nullptr; \
259 } \
260 } while (0)
261
262/* Shaders */
263void DRW_shader_init();
264void DRW_shader_exit();
265
267 bNodeTree *ntree,
268 eGPUMaterialEngine engine,
269 const uint64_t shader_id,
270 const bool is_volume_shader,
271 bool deferred,
273 void *thunk);
275 Material *ma,
276 bNodeTree *ntree,
277 eGPUMaterialEngine engine,
278 const uint64_t shader_id,
279 const bool is_volume_shader,
280 bool deferred,
282 void *thunk,
283 GPUMaterialPassReplacementCallbackFn pass_replacement_cb = nullptr);
285void DRW_shader_free(GPUShader *shader);
286#define DRW_SHADER_FREE_SAFE(shader) \
287 do { \
288 if (shader != nullptr) { \
289 DRW_shader_free(shader); \
290 shader = nullptr; \
291 } \
292 } while (0)
293
294/* Batches */
295
300
306
308 int arraysize);
309#define DRW_shgroup_instance_format(format, ...) \
310 do { \
311 if (format == nullptr) { \
312 DRWInstanceAttrFormat drw_format[] = __VA_ARGS__; \
313 format = DRW_shgroup_instance_format_array( \
314 drw_format, (sizeof(drw_format) / sizeof(DRWInstanceAttrFormat))); \
315 } \
316 } while (0)
317
322 DRWPass *pass,
323 blender::gpu::VertBuf *tf_target);
324
326
330typedef bool(DRWCallVisibilityFn)(bool vis_in, void *user_data);
331
333 const Object *ob,
334 const float (*obmat)[4],
335 blender::gpu::Batch *geom,
336 bool bypass_culling,
337 void *user_data);
338
342#define DRW_shgroup_call(shgroup, geom, ob) \
343 DRW_shgroup_call_ex(shgroup, ob, nullptr, geom, false, nullptr)
344
348#define DRW_shgroup_call_obmat(shgroup, geom, obmat) \
349 DRW_shgroup_call_ex(shgroup, nullptr, obmat, geom, false, nullptr)
350
351/* TODO(fclem): remove this when we have #DRWView */
352/* user_data is used by #DRWCallVisibilityFn defined in #DRWView. */
353#define DRW_shgroup_call_with_callback(shgroup, geom, ob, user_data) \
354 DRW_shgroup_call_ex(shgroup, ob, nullptr, geom, false, user_data)
355
359#define DRW_shgroup_call_no_cull(shgroup, geom, ob) \
360 DRW_shgroup_call_ex(shgroup, ob, nullptr, geom, true, nullptr)
361
363 DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint v_sta, uint v_num);
368 DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint i_sta, uint i_num);
369
371 int groups_x_len,
372 int groups_y_len,
373 int groups_z_len);
377void DRW_shgroup_call_compute_ref(DRWShadingGroup *shgroup, int groups_ref[3]);
381void DRW_shgroup_call_compute_indirect(DRWShadingGroup *shgroup, GPUStorageBuf *indirect_buf);
382void DRW_shgroup_call_procedural_points(DRWShadingGroup *sh, const Object *ob, uint point_count);
383void DRW_shgroup_call_procedural_lines(DRWShadingGroup *sh, const Object *ob, uint line_count);
386 GPUPrimType primitive_type,
387 Object *ob,
388 GPUStorageBuf *indirect_buf);
394 const Object *ob,
395 blender::gpu::Batch *geom,
396 uint count);
401 const Object *ob,
402 blender::gpu::Batch *geom,
403 blender::gpu::Batch *inst_attributes);
404
406 Object *ob,
407 bool use_wire,
408 bool use_mask,
409 bool use_fset,
410 bool use_color,
411 bool use_uv);
412
414 GPUMaterial **gpumats,
415 int num_shgroups,
416 const Object *ob);
417
420 GPUPrimType prim_type);
423 blender::gpu::Batch *geom);
424
425void DRW_buffer_add_entry_struct(DRWCallBuffer *callbuf, const void *data);
426void DRW_buffer_add_entry_array(DRWCallBuffer *callbuf, const void *attr[], uint attr_len);
427
428#define DRW_buffer_add_entry(buffer, ...) \
429 do { \
430 const void *array[] = {__VA_ARGS__}; \
431 DRW_buffer_add_entry_array(buffer, array, (sizeof(array) / sizeof(*array))); \
432 } while (0)
433
438
445
453 uint write_mask,
454 uint reference,
455 uint compare_mask);
460
465
470 eGPUFrameBufferBits channels,
471 uchar r,
472 uchar g,
473 uchar b,
474 uchar a,
475 float depth,
476 uchar stencil);
477
479 const char *name,
480 const GPUTexture *tex,
481 GPUSamplerState sampler_state);
483 const char *name,
484 GPUTexture **tex,
485 GPUSamplerState sampler_state);
487 const char *name,
488 const GPUTexture *tex);
489void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex);
491 const char *name,
492 const GPUUniformBuf *ubo DRW_DEBUG_FILE_LINE_ARGS);
494 const char *name,
495 GPUUniformBuf **ubo DRW_DEBUG_FILE_LINE_ARGS);
497 const char *name,
498 const GPUStorageBuf *ssbo DRW_DEBUG_FILE_LINE_ARGS);
500 const char *name,
501 GPUStorageBuf **ssbo DRW_DEBUG_FILE_LINE_ARGS);
503 const char *name,
504 const float *value,
505 int arraysize);
507 const char *name,
508 const float *value,
509 int arraysize);
511 const char *name,
512 const float *value,
513 int arraysize);
515 const char *name,
516 const float *value,
517 int arraysize);
519 const char *name,
520 const int *value,
521 int arraysize);
523 const char *name,
524 const int *value,
525 int arraysize);
527 const char *name,
528 const int *value,
529 int arraysize);
531 const char *name,
532 const int *value,
533 int arraysize);
535 const char *name,
536 const int *value,
537 int arraysize);
538void DRW_shgroup_uniform_mat3(DRWShadingGroup *shgroup, const char *name, const float (*value)[3]);
539void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float (*value)[4]);
540void DRW_shgroup_uniform_image(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex);
541void DRW_shgroup_uniform_image_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex);
542
543/* Store value instead of referencing it. */
544
545void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, int value);
546void DRW_shgroup_uniform_ivec2_copy(DRWShadingGroup *shgroup, const char *name, const int *value);
547void DRW_shgroup_uniform_ivec3_copy(DRWShadingGroup *shgroup, const char *name, const int *value);
548void DRW_shgroup_uniform_ivec4_copy(DRWShadingGroup *shgroup, const char *name, const int *value);
549void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, bool value);
550void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, float value);
551void DRW_shgroup_uniform_vec2_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
552void DRW_shgroup_uniform_vec3_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
553void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
555 const char *name,
556 const float (*value)[4]);
558 const char *name,
561 const char *name,
562 blender::gpu::VertBuf **vertex_buffer
565 const char *name,
566 blender::gpu::VertBuf *vertex_buffer);
568 const char *name,
569 blender::gpu::VertBuf **vertex_buffer);
570
571#ifdef DRW_UNUSED_RESOURCE_TRACKING
572# define DRW_shgroup_vertex_buffer(shgroup, name, vert) \
573 DRW_shgroup_vertex_buffer_ex(shgroup, name, vert, __FILE__, __LINE__)
574# define DRW_shgroup_vertex_buffer_ref(shgroup, name, vert) \
575 DRW_shgroup_vertex_buffer_ref_ex(shgroup, name, vert, __FILE__, __LINE__)
576# define DRW_shgroup_uniform_block(shgroup, name, ubo) \
577 DRW_shgroup_uniform_block_ex(shgroup, name, ubo, __FILE__, __LINE__)
578# define DRW_shgroup_uniform_block_ref(shgroup, name, ubo) \
579 DRW_shgroup_uniform_block_ref_ex(shgroup, name, ubo, __FILE__, __LINE__)
580# define DRW_shgroup_storage_block(shgroup, name, ssbo) \
581 DRW_shgroup_storage_block_ex(shgroup, name, ssbo, __FILE__, __LINE__)
582# define DRW_shgroup_storage_block_ref(shgroup, name, ssbo) \
583 DRW_shgroup_storage_block_ref_ex(shgroup, name, ssbo, __FILE__, __LINE__)
584#else
585# define DRW_shgroup_vertex_buffer(shgroup, name, vert) \
586 DRW_shgroup_vertex_buffer_ex(shgroup, name, vert)
587# define DRW_shgroup_vertex_buffer_ref(shgroup, name, vert) \
588 DRW_shgroup_vertex_buffer_ref_ex(shgroup, name, vert)
589# define DRW_shgroup_uniform_block(shgroup, name, ubo) \
590 DRW_shgroup_uniform_block_ex(shgroup, name, ubo)
591# define DRW_shgroup_uniform_block_ref(shgroup, name, ubo) \
592 DRW_shgroup_uniform_block_ref_ex(shgroup, name, ubo)
593# define DRW_shgroup_storage_block(shgroup, name, ssbo) \
594 DRW_shgroup_storage_block_ex(shgroup, name, ssbo)
595# define DRW_shgroup_storage_block_ref(shgroup, name, ssbo) \
596 DRW_shgroup_storage_block_ref_ex(shgroup, name, ssbo)
597#endif
598
600
601/* Passes. */
602
603DRWPass *DRW_pass_create(const char *name, DRWState state);
608DRWPass *DRW_pass_create_instance(const char *name, DRWPass *original, DRWState state);
612void DRW_pass_link(DRWPass *first, DRWPass *second);
614 void (*callback)(void *user_data, DRWShadingGroup *shgroup),
615 void *user_data);
625
626bool DRW_pass_is_empty(DRWPass *pass);
627
628#define DRW_PASS_CREATE(pass, state) (pass = DRW_pass_create(#pass, state))
629#define DRW_PASS_INSTANCE_CREATE(pass, original, state) \
630 (pass = DRW_pass_create_instance(#pass, (original), state))
631
632/* Views. */
633
637DRWView *DRW_view_create(const float viewmat[4][4],
638 const float winmat[4][4],
639 const float (*culling_viewmat)[4],
640 const float (*culling_winmat)[4],
641 DRWCallVisibilityFn *visibility_fn);
645DRWView *DRW_view_create_sub(const DRWView *parent_view,
646 const float viewmat[4][4],
647 const float winmat[4][4]);
648
652void DRW_view_update(DRWView *view,
653 const float viewmat[4][4],
654 const float winmat[4][4],
655 const float (*culling_viewmat)[4],
656 const float (*culling_winmat)[4]);
660void DRW_view_update_sub(DRWView *view, const float viewmat[4][4], const float winmat[4][4]);
661
669void DRW_view_default_set(const DRWView *view);
673void DRW_view_reset();
677void DRW_view_set_active(const DRWView *view);
679
685void DRW_view_clip_planes_set(DRWView *view, float (*planes)[4], int plane_len);
686
687/* For all getters, if view is nullptr, default view is assumed. */
688
689void DRW_view_winmat_get(const DRWView *view, float mat[4][4], bool inverse);
690void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse);
691void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse);
692
696void DRW_view_frustum_corners_get(const DRWView *view, BoundBox *corners);
701void DRW_view_frustum_planes_get(const DRWView *view, float planes[6][4]);
702
707float DRW_view_near_distance_get(const DRWView *view);
708float DRW_view_far_distance_get(const DRWView *view);
709bool DRW_view_is_persp_get(const DRWView *view);
710
711/* Culling, return true if object is inside view frustum. */
712
717bool DRW_culling_sphere_test(const DRWView *view, const BoundSphere *bsphere);
722bool DRW_culling_box_test(const DRWView *view, const BoundBox *bbox);
727bool DRW_culling_plane_test(const DRWView *view, const float plane[4]);
732bool DRW_culling_min_max_test(const DRWView *view, float obmat[4][4], float min[3], float max[3]);
733
734void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners);
735void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4]);
736
737/* Viewport. */
738
739const float *DRW_viewport_size_get();
740const float *DRW_viewport_invert_size_get();
741const float *DRW_viewport_pixelsize_get();
742
745
746/* See DRW_viewport_pass_texture_get. */
748
750
751void DRW_render_to_image(RenderEngine *engine, Depsgraph *depsgraph);
753 void *vedata,
754 RenderEngine *engine,
755 Depsgraph *depsgraph,
756 void (*callback)(void *vedata, Object *ob, RenderEngine *engine, Depsgraph *depsgraph));
764void DRW_render_set_time(RenderEngine *engine, Depsgraph *depsgraph, int frame, float subframe);
768void DRW_render_viewport_size_set(const int size[2]);
769
775void DRW_custom_pipeline(DrawEngineType *draw_engine_type,
776 Depsgraph *depsgraph,
777 void (*callback)(void *vedata, void *user_data),
778 void *user_data);
782void DRW_custom_pipeline_begin(DrawEngineType *draw_engine_type, Depsgraph *depsgraph);
784
788void DRW_cache_restart();
789
790/* ViewLayers */
791
794 DrawEngineType *engine_type,
795 void (*callback)(void *storage));
797 void (*callback)(void *storage));
798
799/* DrawData */
800
801DrawData *DRW_drawdata_get(ID *id, DrawEngineType *engine_type);
803 DrawEngineType *engine_type,
804 size_t size,
805 DrawDataInitCb init_cb,
806 DrawDataFreeCb free_cb);
810void **DRW_duplidata_get(void *vedata);
811
812/* Settings. */
813
814bool DRW_object_is_renderable(const Object *ob);
822bool DRW_object_is_in_edit_mode(const Object *ob);
828bool DRW_object_use_hide_faces(const Object *ob);
829
831 const ParticleSystem *psys);
832
835
836/* Draw commands */
837
838void DRW_draw_pass(DRWPass *pass);
842void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group);
843
846
851void DRW_state_reset();
859
860/* Selection. */
861
862void DRW_select_load_id(uint id);
863
864/* Draw State. */
865
870bool DRW_state_is_fbo();
876bool DRW_state_is_depth();
912
913/* Avoid too many lookups while drawing */
915
916 ARegion *region; /* 'CTX_wm_region(C)' */
917 RegionView3D *rv3d; /* 'CTX_wm_region_view3d(C)' */
918 View3D *v3d; /* 'CTX_wm_view3d(C)' */
919 SpaceLink *space_data; /* 'CTX_wm_space_data(C)' */
920
921 Scene *scene; /* 'CTX_data_scene(C)' */
922 ViewLayer *view_layer; /* 'CTX_data_view_layer(C)' */
923
924 /* Use 'object_edit' for edit-mode */
926
928
929 Depsgraph *depsgraph;
930
932
934
936
940
941 /* ---- */
942
943 /* Cache: initialized by 'drw_context_state_init'. */
946};
947
949
951 Mesh *mesh,
953 blender::draw::DRW_MeshCDMask **r_cd_needed);
954
956 void *user_data,
957 const float bmin[3],
958 const float bmax[3],
960
General operations, lookup, etc. for materials.
PBVHNodeFlags
Definition BKE_pbvh.hh:29
unsigned char uchar
unsigned int uint
void(* DrawDataFreeCb)(struct DrawData *engine_data)
Definition DNA_ID.h:40
void(* DrawDataInitCb)(struct DrawData *engine_data)
Definition DNA_ID.h:39
eObjectMode
Object is a sort of wrapper for general info.
const DRWView * DRW_view_default_get()
DRWShadingGroup * DRW_shgroup_create(GPUShader *shader, DRWPass *pass)
GPUTexture * DRW_texture_create_1d(int w, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
eDRWAttrType
@ DRW_ATTR_INT
@ DRW_ATTR_FLOAT
void DRW_view_frustum_corners_get(const DRWView *view, BoundBox *corners)
GPUTexture * DRW_texture_pool_query_fullscreen_ex(eGPUTextureFormat format, eGPUTextureUsage usage, DrawEngineType *engine_type)
float DRW_view_near_distance_get(const DRWView *view)
void DRW_texture_generate_mipmaps(GPUTexture *tex)
DrawData * DRW_drawdata_get(ID *id, DrawEngineType *engine_type)
struct DRWInterface DRWInterface
Definition DRW_render.hh:84
DupliObject * DRW_object_get_dupli(const Object *ob)
const float * DRW_viewport_invert_size_get()
GPUTexture * DRW_texture_create_cube_ex(int w, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
void DRW_shader_exit()
const float * DRW_viewport_pixelsize_get()
bool DRW_state_show_text()
void DRW_texture_free(GPUTexture *tex)
void DRW_shgroup_call_ex(DRWShadingGroup *shgroup, const Object *ob, const float(*obmat)[4], blender::gpu::Batch *geom, bool bypass_culling, void *user_data)
void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_state_disable(DRWShadingGroup *shgroup, DRWState state)
bool DRW_shgroup_is_empty(DRWShadingGroup *shgroup)
char DRWViewportEmptyList
Definition DRW_render.hh:97
void DRW_shgroup_uniform_texture_ex(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex, GPUSamplerState sampler_state)
GPUTexture * DRW_texture_create_cube_array(int w, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
void DRW_shgroup_buffer_texture(DRWShadingGroup *shgroup, const char *name, blender::gpu::VertBuf *vertex_buffer)
bool DRW_state_draw_background()
bool DRW_culling_plane_test(const DRWView *view, const float plane[4])
void DRW_view_frustum_planes_get(const DRWView *view, float planes[6][4])
void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
GPUTexture * DRW_texture_create_2d_ex(int w, int h, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
void * DRW_view_layer_engine_data_get(DrawEngineType *engine_type)
void DRW_shgroup_uniform_ivec3_copy(DRWShadingGroup *shgroup, const char *name, const int *value)
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, bool value)
bool DRW_state_is_viewport_image_render()
GPUMaterial * DRW_shader_from_material(Material *ma, bNodeTree *ntree, eGPUMaterialEngine engine, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk, GPUMaterialPassReplacementCallbackFn pass_replacement_cb=nullptr)
#define DRW_DEBUG_FILE_LINE_ARGS
Definition DRW_render.hh:61
void DRW_shgroup_call_instances_with_attrs(DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, blender::gpu::Batch *inst_attributes)
void DRW_buffer_add_entry_struct(DRWCallBuffer *callbuf, const void *data)
void DRW_shgroup_stencil_set(DRWShadingGroup *shgroup, uint write_mask, uint reference, uint compare_mask)
GPUTexture * DRW_texture_create_3d_ex(int w, int h, int d, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get()
bool DRW_culling_sphere_test(const DRWView *view, const BoundSphere *bsphere)
DRWPass * DRW_pass_create(const char *name, DRWState state)
void DRW_shgroup_call_instances(DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint count)
void DRW_shgroup_call_compute_indirect(DRWShadingGroup *shgroup, GPUStorageBuf *indirect_buf)
void DRW_buffer_add_entry_array(DRWCallBuffer *callbuf, const void *attr[], uint attr_len)
void DRW_shgroup_state_enable(DRWShadingGroup *shgroup, DRWState state)
void DRW_cache_restart()
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
GPUMaterial * DRW_shader_from_world(World *wo, bNodeTree *ntree, eGPUMaterialEngine engine, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk)
void DRW_shader_free(GPUShader *shader)
void DRW_shader_queue_optimize_material(GPUMaterial *mat)
bool DRW_object_is_in_edit_mode(const Object *ob)
void DRW_shgroup_uniform_ivec2_copy(DRWShadingGroup *shgroup, const char *name, const int *value)
bool DRW_state_is_material_select()
DRWCallBuffer * DRW_shgroup_call_buffer_instance(DRWShadingGroup *shgroup, GPUVertFormat *format, blender::gpu::Batch *geom)
blender::draw::TextureFromPool & DRW_viewport_pass_texture_get(const char *pass_name)
void DRW_pass_link(DRWPass *first, DRWPass *second)
void DRW_render_viewport_size_set(const int size[2])
void DRW_shgroup_uniform_vec3_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void ** DRW_view_layer_engine_data_ensure_ex(ViewLayer *view_layer, DrawEngineType *engine_type, void(*callback)(void *storage))
void DRW_shgroup_uniform_vec3(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
bool DRW_view_is_persp_get(const DRWView *view)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, float value)
void DRW_shgroup_call_procedural_lines(DRWShadingGroup *sh, const Object *ob, uint line_count)
void DRW_draw_pass(DRWPass *pass)
const float * DRW_viewport_size_get()
void DRW_shgroup_call_sculpt(DRWShadingGroup *shgroup, Object *ob, bool use_wire, bool use_mask, bool use_fset, bool use_color, bool use_uv)
DRWTextureFlag
@ DRW_TEX_MIPMAP
@ DRW_TEX_WRAP
@ DRW_TEX_FILTER
@ DRW_TEX_COMPARE
void DRW_pass_foreach_shgroup(DRWPass *pass, void(*callback)(void *user_data, DRWShadingGroup *shgroup), void *user_data)
GPUTexture * DRW_texture_create_2d_array(int w, int h, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
void DRW_view_set_active(const DRWView *view)
void DRW_shgroup_uniform_ivec2(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
uint32_t DRW_object_resource_id_get(Object *ob)
GPUTexture * DRW_texture_create_3d(int w, int h, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
bool DRW_object_use_hide_faces(const Object *ob)
bool DRWCallVisibilityFn(bool vis_in, void *user_data)
void DRW_shgroup_call_procedural_points(DRWShadingGroup *sh, const Object *ob, uint point_count)
void DRW_sculpt_debug_cb(blender::bke::pbvh::Node *node, void *user_data, const float bmin[3], const float bmax[3], PBVHNodeFlags flag)
void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4])
void DRW_draw_callbacks_pre_scene()
DRWShadingGroup * DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
void DRW_shgroup_call_compute(DRWShadingGroup *shgroup, int groups_x_len, int groups_y_len, int groups_z_len)
bool DRW_object_is_renderable(const Object *ob)
DrawData * DRW_drawdata_ensure(ID *id, DrawEngineType *engine_type, size_t size, DrawDataInitCb init_cb, DrawDataFreeCb free_cb)
void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners)
DRWView * DRW_view_create_sub(const DRWView *parent_view, const float viewmat[4][4], const float winmat[4][4])
GPUTexture * DRW_texture_pool_query_fullscreen(eGPUTextureFormat format, DrawEngineType *engine_type)
GPUTexture * DRW_texture_pool_query_2d(int w, int h, eGPUTextureFormat format, DrawEngineType *engine_type)
void DRW_shgroup_barrier(DRWShadingGroup *shgroup, eGPUBarrier type)
void DRW_shgroup_uniform_ivec3(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
void DRW_render_instance_buffer_finish()
void DRW_view_winmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_custom_pipeline(DrawEngineType *draw_engine_type, Depsgraph *depsgraph, void(*callback)(void *vedata, void *user_data), void *user_data)
void DRW_pass_sort_shgroup_z(DRWPass *pass)
bool DRW_pass_is_empty(DRWPass *pass)
void DRW_shgroup_uniform_bool(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
void DRW_shgroup_uniform_mat3(DRWShadingGroup *shgroup, const char *name, const float(*value)[3])
int DRW_object_visibility_in_active_context(const Object *ob)
bool DRW_state_is_image_render()
GPUTexture * DRW_texture_pool_query_2d_ex(int w, int h, eGPUTextureFormat format, eGPUTextureUsage usage, DrawEngineType *engine_type)
void DRW_shgroup_call_compute_ref(DRWShadingGroup *shgroup, int groups_ref[3])
GPUVertFormat * DRW_shgroup_instance_format_array(const DRWInstanceAttrFormat attrs[], int arraysize)
bool DRW_state_is_painting()
void DRW_shgroup_storage_block_ex(DRWShadingGroup *shgroup, const char *name, const GPUStorageBuf *ssbo DRW_DEBUG_FILE_LINE_ARGS)
Object * DRW_object_get_dupli_parent(const Object *ob)
void DRW_view_update(DRWView *view, const float viewmat[4][4], const float winmat[4][4], const float(*culling_viewmat)[4], const float(*culling_winmat)[4])
void DRW_state_reset()
void DRW_shgroup_call_instance_range(DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint i_sta, uint i_num)
void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
bool DRW_state_is_scene_render()
GPUTexture * DRW_texture_create_2d(int w, int h, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
bool DRW_object_is_visible_psys_in_active_context(const Object *object, const ParticleSystem *psys)
void DRW_texture_ensure_2d_ex(GPUTexture **tex, int w, int h, eGPUTextureFormat format, eGPUTextureUsage usage, DRWTextureFlag flags)
void DRW_shgroup_call_range(DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint v_sta, uint v_num)
void DRW_shgroup_add_material_resources(DRWShadingGroup *grp, GPUMaterial *material)
DefaultTextureList * DRW_viewport_texture_list_get()
GPUTexture * DRW_texture_create_2d_array_ex(int w, int h, int d, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
void DRW_shgroup_uniform_ivec4(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
void DRW_shgroup_buffer_texture_ref(DRWShadingGroup *shgroup, const char *name, blender::gpu::VertBuf **vertex_buffer)
float DRW_view_far_distance_get(const DRWView *view)
void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups, GPUMaterial **gpumats, int num_shgroups, const Object *ob)
void DRW_texture_ensure_fullscreen_2d_ex(GPUTexture **tex, eGPUTextureFormat format, eGPUTextureUsage usage, DRWTextureFlag flags)
void DRW_shgroup_storage_block_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUStorageBuf **ssbo DRW_DEBUG_FILE_LINE_ARGS)
void DRW_shgroup_uniform_block_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUUniformBuf **ubo DRW_DEBUG_FILE_LINE_ARGS)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *sh, const Object *ob, uint tri_count)
void DRW_view_clip_planes_set(DRWView *view, float(*planes)[4], int plane_len)
void DRW_render_to_image(RenderEngine *engine, Depsgraph *depsgraph)
void DRW_shgroup_call_procedural_indirect(DRWShadingGroup *shgroup, GPUPrimType primitive_type, Object *ob, GPUStorageBuf *indirect_buf)
void DRW_state_reset_ex(DRWState state)
GPUTexture * DRW_texture_create_1d_ex(int w, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_texture_ensure_2d(GPUTexture **tex, int w, int h, eGPUTextureFormat format, DRWTextureFlag flags)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void ** DRW_view_layer_engine_data_ensure(DrawEngineType *engine_type, void(*callback)(void *storage))
void DRW_shgroup_clear_framebuffer(DRWShadingGroup *shgroup, eGPUFrameBufferBits channels, uchar r, uchar g, uchar b, uchar a, float depth, uchar stencil)
void DRW_draw_pass_subset(DRWPass *pass, DRWShadingGroup *start_group, DRWShadingGroup *end_group)
void DRW_shgroup_uniform_mat4_copy(DRWShadingGroup *shgroup, const char *name, const float(*value)[4])
void ** DRW_duplidata_get(void *vedata)
void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float(*value)[4])
void DRW_shgroup_uniform_image_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
void DRW_render_set_time(RenderEngine *engine, Depsgraph *depsgraph, int frame, float subframe)
const DRWContextState * DRW_context_state_get()
void DRW_view_reset()
bool DRW_state_draw_support()
void DRW_shgroup_uniform_vec2_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_draw_callbacks_post_scene()
void DRW_state_lock(DRWState state)
void DRW_shgroup_uniform_texture_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex, GPUSamplerState sampler_state)
DRWShadingGroup * DRW_shgroup_transform_feedback_create(GPUShader *shader, DRWPass *pass, blender::gpu::VertBuf *tf_target)
void DRW_view_default_set(const DRWView *view)
void DRW_shgroup_uniform_block_ex(DRWShadingGroup *shgroup, const char *name, const GPUUniformBuf *ubo DRW_DEBUG_FILE_LINE_ARGS)
bool DRW_is_viewport_compositor_enabled()
GPUTexture * DRW_texture_create_cube_array_ex(int w, int d, eGPUTextureFormat format, eGPUTextureUsage usage_flags, DRWTextureFlag flags, const float *fpixels)
bool DRW_state_is_fbo()
void DRW_mesh_batch_cache_get_attributes(Object *object, Mesh *mesh, blender::draw::DRW_Attributes **r_attrs, blender::draw::DRW_MeshCDMask **r_cd_needed)
void DRW_viewport_request_redraw()
DRWCallBuffer * DRW_shgroup_call_buffer(DRWShadingGroup *shgroup, GPUVertFormat *format, GPUPrimType prim_type)
void DRW_pass_sort_shgroup_reverse(DRWPass *pass)
void DRW_view_update_sub(DRWView *view, const float viewmat[4][4], const float winmat[4][4])
bool DRW_culling_min_max_test(const DRWView *view, float obmat[4][4], float min[3], float max[3])
void DRW_custom_pipeline_end()
void DRW_render_object_iter(void *vedata, RenderEngine *engine, Depsgraph *depsgraph, void(*callback)(void *vedata, Object *ob, RenderEngine *engine, Depsgraph *depsgraph))
void DRW_shgroup_vertex_buffer_ref_ex(DRWShadingGroup *shgroup, const char *name, blender::gpu::VertBuf **vertex_buffer DRW_DEBUG_FILE_LINE_ARGS)
void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
bool DRW_state_is_select()
bool DRW_culling_box_test(const DRWView *view, const BoundBox *bbox)
void DRW_shgroup_uniform_image(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
GPUTexture * DRW_texture_create_cube(int w, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
void DRW_select_load_id(uint id)
void DRW_shgroup_uniform_ivec4_copy(DRWShadingGroup *shgroup, const char *name, const int *value)
const DRWView * DRW_view_get_active()
void DRW_shader_init()
void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, uint mask)
DRWShadingGroup * DRW_shgroup_material_create(GPUMaterial *material, DRWPass *pass)
bool DRW_state_is_navigating()
bool DRW_state_is_playback()
void DRW_shgroup_vertex_buffer_ex(DRWShadingGroup *shgroup, const char *name, blender::gpu::VertBuf *vertex_buffer DRW_DEBUG_FILE_LINE_ARGS)
DRWView * DRW_view_create(const float viewmat[4][4], const float winmat[4][4], const float(*culling_viewmat)[4], const float(*culling_winmat)[4], DRWCallVisibilityFn *visibility_fn)
DRWPass * DRW_pass_create_instance(const char *name, DRWPass *original, DRWState state)
void DRW_custom_pipeline_begin(DrawEngineType *draw_engine_type, Depsgraph *depsgraph)
bool DRW_state_is_depth()
void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, int value)
struct DRWShaderLibrary DRWShaderLibrary
Definition DRW_render.hh:86
eGPUFrameBufferBits
eGPUMaterialEngine
void(*)(void *thunk, GPUMaterial *mat, GPUCodegenOutput *codegen) GPUCodegenCallbackFn
GPUPass *(*)(void *thunk, GPUMaterial *mat) GPUMaterialPassReplacementCallbackFn
GPUPrimType
eGPUBarrier
Definition GPU_state.hh:29
eGPUTextureUsage
eGPUTextureFormat
Read Guarded memory(de)allocation.
struct GPUShader GPUShader
btMatrix3x3 inverse() const
Return the inverse of the matrix.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
local_group_size(16, 16) .push_constant(Type b
const Depsgraph * depsgraph
DEGForeachIDComponentCallback callback
Simple API to draw debug shapes in the viewport. IMPORTANT: This is the legacy API for C....
DRWState
Definition draw_state.hh:25
int count
format
static ulong state[N]
#define min(a, b)
Definition sort.c:32
unsigned int uint32_t
Definition stdint.h:80
unsigned __int64 uint64_t
Definition stdint.h:90
float center[3]
Definition DRW_render.hh:93
Object * object_pose
ViewLayer * view_layer
TaskGraph * task_graph
Depsgraph * depsgraph
eGPUShaderConfig sh_cfg
eObjectMode object_mode
ARegion * region
const bContext * evil_C
RenderEngineType * engine_type
Object * object_edit
RegionView3D * rv3d
SpaceLink * space_data
void(* render_to_image)(void *vedata, RenderEngine *engine, RenderLayer *layer, const rcti *rect)
DrawEngineType * prev
void(* cache_populate)(void *vedata, Object *ob)
void(* instance_free)(void *instance_data)
DrawEngineType * next
void(* id_update)(void *vedata, ID *id)
char idname[32]
void(* engine_init)(void *vedata)
void(* store_metadata)(void *vedata, RenderResult *render_result)
const DrawEngineDataSize * vedata_size
void(* draw_scene)(void *vedata)
void(* engine_free)()
void(* view_update)(void *vedata)
void(* cache_init)(void *vedata)
void(* cache_finish)(void *vedata)
Definition DNA_ID.h:413
uint8_t flag
Definition wm_window.cc:138