47 PassSimple edit_mesh_normals_ps_ = {
"Normals"};
55 PassSimple edit_mesh_analysis_ps_ = {
"Mesh Analysis"};
56 PassSimple edit_mesh_weight_ps_ = {
"Edit Weight"};
62 PassSimple edit_mesh_facedots_ps_ = {
"FaceDots"};
63 PassSimple edit_mesh_skin_roots_ps_ = {
"SkinRoots"};
66 PassSimple edit_mesh_prepass_ps_ = {
"Prepass"};
68 bool xray_enabled_ =
false;
69 bool xray_flag_enabled_ =
false;
71 bool show_retopology_ =
false;
72 bool show_mesh_analysis_ =
false;
73 bool show_face_overlay_ =
false;
74 bool show_weight_ =
false;
76 bool select_vert_ =
false;
77 bool select_edge_ =
false;
78 bool select_face_ =
false;
79 bool select_face_dots_ =
false;
85 static constexpr float cage_ndc_offset_ = 0.5f;
86 static constexpr float edge_ndc_offset_ = 1.0f;
87 static constexpr float vert_ndc_offset_ = 1.5f;
91 View view_edit_cage_ = {
"view_edit_cage"};
103 offset_data_ =
state.offset_data_get();
104 xray_enabled_ =
state.xray_enabled;
105 xray_flag_enabled_ =
state.xray_flag_enabled;
107 const int edit_flag =
state.v3d->overlay.edit_flag;
126 const bool is_wire_shading_mode = (
state.v3d->shading.type ==
OB_WIRE);
128 uint4 data_mask = data_mask_get(edit_flag);
130 float backwire_opacity = (
state.xray_flag_enabled) ? 0.5f : 1.0f;
131 float face_alpha = (show_face_overlay_) ? 1.0f : 0.0f;
137 gpu::Texture **depth_tex = (
state.xray_flag_enabled) ? &res.depth_tx : &res.dummy_depth_tx;
140 auto &pass = edit_mesh_prepass_ps_;
143 state.clipping_plane_count);
144 pass.shader_set(res.shaders->mesh_edit_depth.get());
145 pass.push_constant(
"retopology_offset", retopology_offset);
157 if (
state.xray_flag_enabled) {
161 auto &pass = edit_mesh_normals_ps_;
165 pass.state_set(pass_state,
state.clipping_plane_count);
168 auto &sub = pass.sub(
name);
169 sub.shader_set(shader);
170 sub.bind_texture(
"depth_tx", depth_tex);
171 sub.push_constant(
"alpha", backwire_opacity);
172 sub.push_constant(
"is_constant_screen_size_normals", use_screen_size);
173 sub.push_constant(
"normal_size",
state.overlay.normals_length);
174 sub.push_constant(
"normal_screen_size",
state.overlay.normals_constant_screen_size);
175 sub.push_constant(
"retopology_offset", retopology_offset);
176 sub.push_constant(
"hq_normals", use_hq_normals);
180 face_normals_ = loop_normals_ = vert_normals_ =
nullptr;
183 face_normals_subdiv_ = shader_pass(res.shaders->mesh_face_normal_subdiv.get(),
"SubdFNor");
184 face_normals_ = shader_pass(res.shaders->mesh_face_normal.get(),
"FaceNor");
187 loop_normals_subdiv_ = shader_pass(res.shaders->mesh_loop_normal_subdiv.get(),
"SubdLNor");
188 loop_normals_ = shader_pass(res.shaders->mesh_loop_normal.get(),
"LoopNor");
191 vert_normals_subdiv_ = shader_pass(res.shaders->mesh_vert_normal_subdiv.get(),
"SubdVNor");
192 vert_normals_ = shader_pass(res.shaders->mesh_vert_normal.get(),
"VertexNor");
200 auto &pass = edit_mesh_weight_ps_;
203 state.clipping_plane_count);
204 pass.shader_set(shadeless ? res.shaders->paint_weight.get() :
205 res.shaders->paint_weight_fake_shading.get());
208 pass.bind_texture(
"colorramp", &res.weight_ramp_tx);
209 pass.push_constant(
"draw_contours",
false);
210 pass.push_constant(
"opacity",
state.overlay.weight_paint_mode_opacity);
217 auto &pass = edit_mesh_analysis_ps_;
220 state.clipping_plane_count);
221 pass.shader_set(res.shaders->mesh_analysis.get());
222 pass.bind_texture(
"weight_tx", res.weight_ramp_tx);
225 auto mesh_edit_common_resource_bind = [&](
PassSimple &pass,
float alpha,
float ndc_offset) {
241 auto &pass = edit_mesh_edges_ps_;
246 state.clipping_plane_count);
247 pass.
shader_set(res.shaders->mesh_edit_edge.get());
250 mesh_edit_common_resource_bind(pass, backwire_opacity, edge_ndc_offset_);
253 auto &pass = edit_mesh_faces_ps_;
257 state.clipping_plane_count);
258 pass.
shader_set(res.shaders->mesh_edit_face.get());
259 mesh_edit_common_resource_bind(pass, face_alpha, 0.0f);
262 auto &pass = edit_mesh_cages_ps_;
265 state.clipping_plane_count);
266 pass.
shader_set(res.shaders->mesh_edit_face.get());
267 mesh_edit_common_resource_bind(pass, face_alpha, cage_ndc_offset_);
270 auto &pass = edit_mesh_verts_ps_;
274 state.clipping_plane_count);
275 pass.
shader_set(res.shaders->mesh_edit_vert.get());
276 mesh_edit_common_resource_bind(pass, backwire_opacity, vert_ndc_offset_);
279 auto &pass = edit_mesh_facedots_ps_;
283 state.clipping_plane_count);
284 pass.
shader_set(res.shaders->mesh_edit_facedot.get());
285 mesh_edit_common_resource_bind(pass, backwire_opacity, vert_ndc_offset_);
288 auto &pass = edit_mesh_skin_roots_ps_;
292 state.clipping_plane_count);
293 pass.
shader_set(res.shaders->mesh_edit_skin_root.get());
311 Object *ob = ob_ref.object;
316 const bool draw_as_solid = (ob->
dt >
OB_WIRE) && !
state.xray_enabled;
319 if (show_retopology_) {
321 edit_mesh_prepass_ps_.draw(geom, res_handle);
323 if (draw_as_solid && !
state.is_render_depth_available) {
325 edit_mesh_prepass_ps_.draw(geom, res_handle);
328 if (show_mesh_analysis_) {
330 edit_mesh_analysis_ps_.draw(geom, res_handle);
335 edit_mesh_weight_ps_.draw(geom, res_handle);
340 (use_gpu_subdiv && !has_edit_cage ? face_normals_subdiv_ : face_normals_)
345 (use_gpu_subdiv && !has_edit_cage ? loop_normals_subdiv_ : loop_normals_)
350 ((use_gpu_subdiv && !has_edit_cage) ? vert_normals_subdiv_ : vert_normals_)
356 edit_mesh_edges_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
360 (has_edit_cage ? &edit_mesh_cages_ps_ : &edit_mesh_faces_ps_)->
draw(geom, res_handle);
364 edit_mesh_verts_ps_.draw(geom, res_handle);
366 if (select_face_dots_) {
368 edit_mesh_facedots_ps_.draw(geom, res_handle);
371 if (mesh_has_skin_roots(ob)) {
373 edit_mesh_skin_roots_ps_.draw_expand(geom,
GPU_PRIM_LINES, 32, 1, res_handle);
389 manager.submit(edit_mesh_prepass_ps_,
view);
390 manager.submit(edit_mesh_analysis_ps_,
view);
391 manager.submit(edit_mesh_weight_ps_,
view);
393 if (!xray_enabled_) {
396 manager.submit(edit_mesh_faces_ps_,
view);
397 manager.submit(edit_mesh_cages_ps_,
view);
400 if (xray_flag_enabled_) {
405 manager.submit(edit_mesh_normals_ps_,
view);
406 manager.submit(edit_mesh_edges_ps_,
view);
407 manager.submit(edit_mesh_verts_ps_,
view);
408 manager.submit(edit_mesh_skin_roots_ps_,
view);
409 manager.submit(edit_mesh_facedots_ps_,
view);
424 manager.submit(edit_mesh_faces_ps_,
view);
425 manager.submit(edit_mesh_cages_ps_,
view);
428 if (!xray_flag_enabled_) {
435 manager.submit(edit_mesh_normals_ps_,
view);
436 manager.submit(edit_mesh_edges_ps_,
view);
437 manager.submit(edit_mesh_verts_ps_,
view);
438 manager.submit(edit_mesh_skin_roots_ps_,
view);
439 manager.submit(edit_mesh_facedots_ps_,
view);
448 if (mesh.
runtime->edit_mesh !=
nullptr) {
452 return (editmesh_eval_cage !=
nullptr) && (editmesh_eval_cage != editmesh_eval_final);
471 static bool mesh_has_skin_roots(
const Object *ob)
497 PassSimple image_border_ps_ = {
"ImageBorder"};
500 PassSimple brush_stencil_ps_ = {
"BrushStencil"};
505 bool select_vert_ =
false;
506 bool select_edge_ =
false;
507 bool select_face_ =
false;
508 bool select_face_dots_ =
false;
510 bool show_face_overlay_ =
false;
512 bool show_uv_edit_ =
false;
517 bool show_wireframe_ =
false;
521 bool show_stencil_ =
false;
525 bool show_mask_ =
false;
527 Mask *mask_id_ =
nullptr;
528 Texture mask_texture_ = {
"mask_texture_"};
531 bool show_mesh_analysis_ =
false;
540 float total_area_ratio_;
543 bool show_tiled_image_active_ =
false;
544 bool show_tiled_image_border_ =
false;
545 bool show_tiled_image_label_ =
false;
571 show_mask_ = space_mode_is_mask && space_image->
mask_info.
mask &&
584 enabled_ = !is_viewer || show_mask_;
592 show_uv_edit_ = space_mode_is_uv && object_mode_is_edit;
595 if (!show_uv_edit_) {
596 select_vert_ =
false;
597 select_edge_ =
false;
598 select_face_ =
false;
599 select_face_dots_ =
false;
601 show_face_overlay_ =
false;
605 select_face_ = !show_mesh_analysis_ && !hide_faces;
610 const char sel_mode_3d = tool_setting->
selectmode;
627 select_face_dots_ = (sel_mode_2d &
UV_SELECT_FACE) && !hide_faces;
631 if (show_mesh_analysis_) {
639 (space_mode_is_paint || space_mode_is_uv);
641 if (space_mode_is_uv && object_mode_is_edit) {
642 show_wireframe_ = show_wireframe_uv_edit;
646 show_wireframe_ = show_wireframe_uv_guide;
648 show_face_overlay_ = show_wireframe_;
656 show_stencil_ = space_mode_is_paint && brush &&
658 image_paint_settings.
clone;
663 show_tiled_image_border_ = is_tiled_image;
664 show_tiled_image_active_ = is_tiled_image;
665 show_tiled_image_label_ = is_tiled_image;
671 if (show_wireframe_) {
672 auto &pass = wireframe_ps_;
676 pass.shader_set(res.shaders->uv_wireframe.get());
679 pass.push_constant(
"alpha", space_image->
uv_opacity);
680 pass.push_constant(
"do_smooth_wire", do_smooth_wire);
684 auto &pass = edges_ps_;
690 pass.specialize_constant(sh,
"use_edge_select", select_edge_);
694 pass.push_constant(
"line_style",
int(edit_uv_line_style_from_space_image(space_image)));
702 const float alpha = (select_vert_ || select_face_dots_) ? space_image->
uv_opacity : 1.0f;
703 pass.push_constant(
"alpha", alpha);
704 pass.push_constant(
"dash_length", dash_length);
705 pass.push_constant(
"do_smooth_wire", do_smooth_wire);
714 auto &pass = verts_ps_;
718 pass.shader_set(res.shaders->uv_edit_vert.get());
721 pass.push_constant(
"dot_size", (dot_size + 1.5f) *
float(
M_SQRT2));
722 pass.push_constant(
"outline_width", 0.75f);
723 pass.push_constant(
"color", theme_color);
726 if (select_face_dots_) {
729 auto &pass = facedots_ps_;
733 pass.shader_set(res.shaders->uv_edit_facedot.get());
736 pass.push_constant(
"dot_size", dot_size);
739 if (show_face_overlay_ || select_face_) {
740 const float opacity = (object_mode_is_edit && space_mode_is_uv) ?
744 auto &pass = faces_ps_;
747 pass.shader_set(res.shaders->uv_edit_face.get());
750 pass.push_constant(
"uv_opacity", opacity);
753 if (show_mesh_analysis_) {
754 auto &pass = analysis_ps_;
758 res.shaders->uv_analysis_stretch_angle.get() :
759 res.shaders->uv_analysis_stretch_area.get());
762 pass.push_constant(
"aspect",
state.image_uv_aspect);
764 pass.push_constant(
"total_area_ratio", &total_area_ratio_);
767 per_mesh_area_3d_.clear();
768 per_mesh_area_2d_.clear();
777 !((ob_ref.object->base_flag &
BASE_SELECTED) || (ob_ref.object ==
state.object_active)))
782 Object *ob = ob_ref.object;
791 if (show_wireframe_ && has_active_object_uvmap) {
793 wireframe_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
795 if (show_face_overlay_ && has_active_object_uvmap && space_image->
uv_face_opacity > 0.0f) {
797 faces_ps_.draw(geom, res_handle);
810 Object &ob = *ob_ref.object;
818 const bool is_uv_editable = is_edit_object && space_image->
mode ==
SI_MODE_UV;
820 const bool is_paint_mode =
ELEM(
823 const bool is_face_selectable = (is_edit_object || (is_paint_mode && use_face_selection));
827 &mesh.
runtime->edit_mesh->bm->ldata,
833 if (has_active_edit_uvmap && is_uv_editable) {
836 edges_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
840 verts_ps_.draw(geom, res_handle);
842 if (select_face_dots_) {
844 facedots_ps_.draw(geom, res_handle);
846 if (show_face_overlay_ || select_face_) {
848 faces_ps_.draw(geom, res_handle);
850 if (show_wireframe_) {
852 wireframe_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
855 if (show_mesh_analysis_) {
856 int index_3d, index_2d;
858 index_3d = per_mesh_area_3d_.append_and_get_index(
nullptr);
859 index_2d = per_mesh_area_2d_.append_and_get_index(
nullptr);
866 ob, mesh, &per_mesh_area_3d_[index_3d], &per_mesh_area_2d_[index_2d]);
868 analysis_ps_.draw(geom, res_handle);
874 if ((has_active_object_uvmap || has_active_edit_uvmap) && is_face_selectable) {
875 if (show_wireframe_) {
877 wireframe_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
879 if ((show_face_overlay_ && space_image->
uv_face_opacity > 0.0f) || select_face_) {
881 faces_ps_.draw(geom, res_handle);
887 if ((has_active_object_uvmap || has_active_edit_uvmap) && !is_uv_editable &&
890 if (show_wireframe_) {
892 wireframe_ps_.draw_expand(geom,
GPU_PRIM_TRIS, 2, 1, res_handle);
896 faces_ps_.draw(geom, res_handle);
908 float total_3d = 0.0f;
909 float total_2d = 0.0f;
910 for (
const float *mesh_area_2d : per_mesh_area_2d_) {
911 total_2d += *mesh_area_2d;
913 for (
const float *mesh_area_3d : per_mesh_area_3d_) {
914 total_3d += *mesh_area_3d;
923 if (show_tiled_image_border_) {
935 auto &pass = image_border_ps_;
938 pass.shader_set(res.shaders->uv_image_borders.get());
941 const int tile_x = ((
tile->tile_number - 1001) % 10);
942 const int tile_y = ((
tile->tile_number - 1001) / 10);
943 const float3 tile_location(tile_x, tile_y, 0.0f);
944 pass.push_constant(
"tile_pos", tile_location);
945 pass.push_constant(
"ucolor", is_active ? selected_color : theme_color);
946 pass.draw(res.shapes.quad_wire.get());
949 if (show_tiled_image_label_ && !is_active) {
950 std::string text = std::to_string(
tile->tile_number);
975 if (show_tiled_image_active_ && active_tile !=
nullptr) {
981 auto &pass = brush_stencil_ps_;
995 pass.shader_set(res.shaders->uv_brush_stencil.get());
996 pass.bind_texture(
"img_tx", stencil_texture);
997 pass.push_constant(
"img_premultiplied",
true);
998 pass.push_constant(
"img_alpha_blend",
true);
999 pass.push_constant(
"ucolor",
float4(1.0f, 1.0f, 1.0f, image_paint_settings.
clone_alpha));
1001 pass.push_constant(
"brush_scale",
float2(stencil_texture.
size().
xy()) / size_image);
1002 pass.draw(res.shapes.quad_solid.get());
1007 paint_mask_texture_ensure(mask_id_,
state.image_size,
state.image_aspect);
1012 auto &pass = paint_mask_ps_;
1016 pass.shader_set(res.shaders->uv_paint_mask.get());
1017 pass.bind_texture(
"img_tx", mask_texture_);
1018 pass.push_constant(
"color",
float4(1.0f, 1.0f, 1.0f, 1.0f));
1019 pass.push_constant(
"opacity", opacity);
1020 pass.push_constant(
"brush_offset",
float2(0.0f));
1021 pass.push_constant(
"brush_scale",
float2(1.0f));
1022 pass.draw(res.shapes.quad_solid.get());
1036 manager.submit(paint_mask_ps_,
view);
1038 if (show_tiled_image_border_) {
1039 manager.submit(image_border_ps_,
view);
1041 if (show_wireframe_) {
1042 manager.submit(wireframe_ps_,
view);
1044 if (show_mesh_analysis_) {
1045 manager.submit(analysis_ps_,
view);
1047 if (show_face_overlay_ || select_face_) {
1048 manager.submit(faces_ps_,
view);
1050 if (show_uv_edit_) {
1051 manager.submit(edges_ps_,
view);
1053 if (select_face_dots_) {
1054 manager.submit(facedots_ps_,
view);
1057 manager.submit(verts_ps_,
view);
1059 if (show_stencil_) {
1060 manager.submit(brush_stencil_ps_,
view);
1077 manager.submit(paint_mask_ps_,
view);
1086 switch (sima->
dt_uv) {
1105 void paint_mask_texture_ensure(
Mask *
mask,
const int2 &resolution,
const float2 &aspect)
1107 const int width = resolution.
x;
1108 const int height =
floor(
float(resolution.
y) * (aspect.
y / aspect.
x));
1116 mask_texture_.free();
1117 mask_texture_.ensure_2d(
CustomData interface, see also DNA_customdata_types.h.
int CustomData_get_offset(const CustomData *data, eCustomDataType type)
int CustomData_get_active_layer(const CustomData *data, eCustomDataType type)
void BKE_image_get_size_fl(Image *image, ImageUser *iuser, float r_size[2])
blender::gpu::Texture * BKE_image_get_gpu_texture(Image *image, ImageUser *iuser)
void BKE_maskrasterize_handle_free(MaskRasterHandle *mr_handle)
MaskRasterHandle * BKE_maskrasterize_handle_new(void)
void BKE_maskrasterize_handle_init(MaskRasterHandle *mr_handle, struct Mask *mask, int width, int height, bool do_aspect_correct, bool do_mask_aa, bool do_feather)
struct MaskRasterHandle MaskRasterHandle
void BKE_maskrasterize_buffer(MaskRasterHandle *mr_handle, unsigned int width, unsigned int height, float *buffer)
Rasterize a buffer from a single mask (threaded execution).
const Mesh * BKE_object_get_editmesh_eval_cage(const Object *object)
const Mesh * BKE_object_get_editmesh_eval_final(const Object *object)
const Brush * BKE_paint_brush_for_read(const Paint *paint)
bool BKE_subsurf_modifier_has_gpu_subdiv(const Mesh *mesh)
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
#define SET_FLAG_FROM_TEST(value, test, flag)
T * DEG_get_original(T *id)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ IMAGE_PAINT_BRUSH_TYPE_CLONE
@ MASK_OVERLAY_ALPHACHANNEL
#define BASE_SELECTED(v3d, base)
@ USER_GPU_FLAG_OVERLAY_SMOOTH_WIRE
@ USER_GPU_FLAG_NO_EDIT_MODE_SMOOTH_WIRE
@ V3D_OVERLAY_EDIT_VERT_NORMALS
@ V3D_OVERLAY_EDIT_INDICES
@ V3D_OVERLAY_EDIT_FREESTYLE_FACE
@ V3D_OVERLAY_EDIT_RETOPOLOGY
@ V3D_OVERLAY_EDIT_LOOP_NORMALS
@ V3D_OVERLAY_EDIT_FACE_NORMALS
@ V3D_OVERLAY_EDIT_CREASES
@ V3D_OVERLAY_EDIT_FREESTYLE_EDGE
@ V3D_OVERLAY_EDIT_CONSTANT_SCREEN_SIZE_NORMALS
@ V3D_OVERLAY_EDIT_FACE_AREA
@ V3D_OVERLAY_EDIT_EDGE_ANG
@ V3D_OVERLAY_EDIT_FACE_DOT
@ V3D_OVERLAY_EDIT_FACE_ANG
@ V3D_OVERLAY_EDIT_STATVIS
@ V3D_OVERLAY_EDIT_BWEIGHTS
@ V3D_OVERLAY_EDIT_WEIGHT
@ V3D_OVERLAY_EDIT_EDGE_LEN
T & DRW_object_get_data_for_drawing(const Object &object)
#define RETOPOLOGY_OFFSET(v3d)
bool GPU_use_hq_normals_workaround()
void GPU_debug_group_end()
void GPU_debug_group_begin(const char *name)
void GPU_framebuffer_bind(blender::gpu::FrameBuffer *fb)
@ GPU_TEXTURE_USAGE_SHADER_READ
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
void UI_GetThemeColorShade4ubv(int colorid, int offset, unsigned char col[4])
float UI_GetThemeValuef(int colorid)
static void draw_tile(const float2 &zoom, const int texcoord_attribute, const int position_attribute, const DrawTile &draw_tile)
void wrap(gpu::Texture *tex)
int3 size(int miplvl=0) const
void shader_set(gpu::Shader *shader)
void bind_texture(const char *name, gpu::Texture *texture, GPUSamplerState state=sampler_auto)
void state_set(DRWState state, int clip_plane_count=0)
void bind_ubo(const char *name, gpu::UniformBuf *buffer)
void push_constant(const char *name, const float &data)
detail::PassBase< command::DrawCommandBuf > Sub
void end_sync(Resources &res, const State &state) final
void object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &, const State &state) final
void draw_on_render(gpu::FrameBuffer *framebuffer, Manager &manager, View &view) final
void draw(Framebuffer &framebuffer, Manager &manager, View &view) final
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &, const State &state) final
void begin_sync(Resources &res, const State &state) final
void draw_line(Framebuffer &framebuffer, Manager &manager, View &view) final
void edit_object_sync(Manager &manager, const ObjectRef &ob_ref, Resources &, const State &state) final
static bool mesh_has_edit_cage(const Object *ob)
void draw_color_only(Framebuffer &framebuffer, Manager &manager, View &view) final
void begin_sync(Resources &res, const State &state) final
bool DRW_object_is_in_edit_mode(const Object *ob)
#define DRW_CLIPPING_UBO_SLOT
#define OVERLAY_GLOBALS_SLOT
void DRW_text_cache_add(DRWTextStore *dt, const float co[3], const char *str, const int str_len, short xoffs, short yoffs, short flag, const uchar col[4], const bool shadow, const bool align_center)
void DRW_text_edit_mesh_measure_stats(const ARegion *region, const View3D *v3d, const Object *ob, const UnitSettings &unit, DRWTextStore *dt)
@ DRW_TEXT_CACHE_GLOBALSPACE
@ DRW_STATE_DEPTH_LESS_EQUAL
@ DRW_STATE_FIRST_VERTEX_CONVENTION
@ DRW_STATE_BLEND_ALPHA_PREMUL
ccl_gpu_kernel_postfix ccl_global KernelWorkTile * tiles
const ccl_global KernelWorkTile * tile
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
constexpr int overlay_edit_text
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_faces_stretch_angle(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_edges(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_edges(Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_facedots(Object &object, Mesh &mesh)
detail::Pass< command::DrawCommandBuf > PassSimple
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_wireframe(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_facedots(Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_verts(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_faces(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_loop_normals(Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_triangles(Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_vertices(Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_all_uv_wireframe(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_vert_normals(Mesh &mesh)
gpu::Batch * DRW_cache_mesh_surface_weights_get(Object *ob)
blender::gpu::Batch * DRW_mesh_batch_cache_get_uv_faces(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edituv_faces_stretch_area(Object &object, Mesh &mesh, float **tot_area, float **tot_uv_area)
gpu::Batch * DRW_cache_mesh_surface_get(Object *ob)
blender::gpu::Batch * DRW_mesh_batch_cache_get_uv_wireframe(Object &object, Mesh &mesh)
blender::gpu::Batch * DRW_mesh_batch_cache_get_edit_skin_roots(Mesh &mesh)
gpu::Batch * DRW_cache_mesh_surface_mesh_analysis_get(Object *ob)
MatBase< T, NumCol, NumRow > normalize(const MatBase< T, NumCol, NumRow > &a)
VecBase< int32_t, 4 > int4
VecBase< uint32_t, 4 > uint4
blender::VecBase< uint8_t, 4 > uchar4
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
ListBaseWrapperTemplate< ListBase, T > ListBaseWrapper
VecBase< float, 3 > float3
@ OVERLAY_UV_LINE_STYLE_DASH
@ OVERLAY_UV_LINE_STYLE_SHADOW
@ OVERLAY_UV_LINE_STYLE_WHITE
@ OVERLAY_UV_LINE_STYLE_OUTLINE
@ OVERLAY_UV_LINE_STYLE_BLACK
MeshRuntimeHandle * runtime
VecBase< T, 2 > xy() const
virtual void draw(Framebuffer &, Manager &, View &)