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
8
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
233void DRW_texture_ensure_fullscreen_2d_ex(GPUTexture **tex,
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,
272 GPUCodegenCallbackFn callback,
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,
281 GPUCodegenCallbackFn callback,
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
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
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
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
701void DRW_view_frustum_planes_get(const DRWView *view, float planes[6][4]);
702
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
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
static AppView * view
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.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
struct GPUShader GPUShader
BPy_StructRNA * depsgraph
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
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
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
ccl_device_inline float4 mask(const int4 mask, const float4 a)
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
float max
uint8_t flag
Definition wm_window.cc:138