35 float *camera_z_axis = viewinv[2];
36 float *camera_pos = viewinv[3];
95 {GPU_ATTACHMENT_TEXTURE(txl->temp_depth_tx), GPU_ATTACHMENT_TEXTURE(txl->outlines_id_tx)});
101 GPU_ATTACHMENT_TEXTURE(txl->overlay_color_tx),
102 GPU_ATTACHMENT_TEXTURE(txl->overlay_line_tx),
109 GPU_ATTACHMENT_TEXTURE(dtxl->color_overlay),
124 const bool do_expand = (
U.pixelsize > 1.0) || (outline_width > 2.0f);
199 float plane[4] = {0.0f, 0.0f, 0.0f, 0.0f};
209 const float object_scale =
mat4_to_scale(ob->object_to_world().ptr());
234 *ob, info.drawing, memory);
237 const IndexRange points = points_by_curve[stroke_i];
238 const int material_index = stroke_materials[stroke_i];
241 const bool hide_onion = info.onion_id != 0;
244 const int num_stroke_triangles = (points.
size() >= 3) ? (points.
size() - 2) : 0;
245 const int num_stroke_vertices = (points.
size() +
246 int(cyclic[stroke_i] && (points.
size() >= 3)));
248 if (hide_material || hide_onion) {
249 t_offset += num_stroke_triangles;
250 t_offset += num_stroke_vertices * 2;
260 int v_first = t_offset * 3;
261 int v_count = num_stroke_triangles * 3;
265 t_offset += num_stroke_triangles;
268 int v_first = t_offset * 3;
269 int v_count = num_stroke_vertices * 2 * 3;
272 t_offset += num_stroke_vertices * 2;
281 if (geom ==
nullptr) {
316 blender::gpu::Batch *geom;
345 if (dupli && !init_dupli) {
368 if (shgroup && geom) {
382 const float clearcol[4] = {0.0f, 0.0f, 0.0f, 0.0f};
Low-level operations for curves.
Low-level operations for grease pencil.
struct MaterialGPencilStyle * BKE_gpencil_material_settings(struct Object *ob, short act)
General operations, lookup, etc. for blender objects.
std::optional< blender::Bounds< blender::float3 > > BKE_object_boundbox_get(const Object *ob)
void plane_from_point_normal_v3(float r_plane[4], const float plane_co[3], const float plane_no[3])
float mat4_to_scale(const float mat[4][4])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void unit_m4(float m[4][4])
void rescale_m4(float mat[4][4], const float scale[3])
bool invert_m4(float mat[4][4])
void transpose_m4(float R[4][4])
void mul_mat3_m4_v3(const float mat[4][4], float r[3])
MINLINE void add_v3_fl(float r[3], float f)
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v3(float n[3])
@ GREASE_PENCIL_STROKE_ORDER_3D
@ GP_MATERIAL_STROKE_SHOW
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
#define DRW_shgroup_call(shgroup, geom, ob)
void GPU_framebuffer_clear_color_depth_stencil(GPUFrameBuffer *fb, const float clear_col[4], float clear_depth, uint clear_stencil)
void GPU_framebuffer_bind(GPUFrameBuffer *framebuffer)
#define GPU_framebuffer_ensure_config(_fb,...)
float UI_GetThemeValuef(int colorid)
struct GPUShader GPUShader
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
void foreach_index(Fn &&fn) const
constexpr int64_t size() const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const void *default_value=nullptr) const
blender::gpu::Batch * DRW_cache_object_surface_get(Object *ob)
blender::gpu::Batch * DRW_cache_object_edge_detection_get(Object *ob, bool *r_is_manifold)
bool DRW_object_is_flat(Object *ob, int *r_axis)
bool DRW_object_axis_orthogonal_to_view(Object *ob, int axis)
DefaultTextureList * DRW_viewport_texture_list_get()
const DRWContextState * DRW_context_state_get()
DRWShadingGroup * DRW_shgroup_create(GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value)
void DRW_shgroup_buffer_texture(DRWShadingGroup *shgroup, const char *name, blender::gpu::VertBuf *vertex_buffer)
bool DRW_view_is_persp_get(const DRWView *view)
DRWShadingGroup * DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
bool DRW_pass_is_empty(DRWPass *pass)
void DRW_shgroup_call_range(DRWShadingGroup *shgroup, const Object *ob, blender::gpu::Batch *geom, uint v_sta, uint v_num)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, const Object *ob, uint tri_count)
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_uniform_bool_copy(DRWShadingGroup *shgroup, const char *name, const bool value)
void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_draw_pass(DRWPass *pass)
void DRW_stats_group_start(const char *name)
void DRW_stats_group_end()
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
@ DRW_STATE_DEPTH_LESS_EQUAL
@ DRW_STATE_BLEND_ALPHA_PREMUL
constexpr float LEGACY_RADIUS_CONVERSION_FACTOR
blender::gpu::Batch * DRW_cache_grease_pencil_get(const Scene *scene, Object *ob)
gpu::VertBuf * DRW_cache_grease_pencil_position_buffer_get(const Scene *scene, Object *ob)
blender::gpu::Batch * DRW_cache_volume_selection_surface_get(Object *ob)
DRWShadingGroup * DRW_shgroup_curves_create_sub(Object *object, DRWShadingGroup *shgrp, GPUMaterial *gpu_material)
DRWShadingGroup * DRW_shgroup_pointcloud_create_sub(Object *object, DRWShadingGroup *shgrp_parent, GPUMaterial *gpu_material)
gpu::VertBuf * DRW_cache_grease_pencil_color_buffer_get(const Scene *scene, Object *ob)
Vector< DrawingInfo > retrieve_visible_drawings(const Scene &scene, const GreasePencil &grease_pencil, const bool do_onion_skinning)
IndexMask retrieve_visible_strokes(Object &object, const bke::greasepencil::Drawing &drawing, IndexMaskMemory &memory)
T midpoint(const T &a, const T &b)
VecBase< float, 3 > float3
static void gpencil_depth_plane(Object *ob, float r_plane[4])
static void OVERLAY_outline_curves(OVERLAY_PrivateData *pd, Object *ob)
void OVERLAY_outline_cache_populate(OVERLAY_Data *vedata, Object *ob, OVERLAY_DupliData *dupli, bool init_dupli)
void OVERLAY_outline_draw(OVERLAY_Data *vedata)
void OVERLAY_outline_init(OVERLAY_Data *vedata)
void OVERLAY_outline_cache_init(OVERLAY_Data *vedata)
static void OVERLAY_outline_pointcloud(OVERLAY_PrivateData *pd, Object *ob)
static void OVERLAY_outline_grease_pencil(OVERLAY_PrivateData *pd, Scene *scene, Object *ob)
static void OVERLAY_outline_volume(OVERLAY_PrivateData *pd, Object *ob)
GPUShader * OVERLAY_shader_outline_prepass(bool use_wire)
GPUShader * OVERLAY_shader_outline_prepass_pointcloud()
GPUShader * OVERLAY_shader_outline_detect()
GPUShader * OVERLAY_shader_outline_prepass_gpencil()
GPUShader * OVERLAY_shader_outline_prepass_curves()
OVERLAY_StorageList * stl
OVERLAY_FramebufferList * fbl
OVERLAY_TextureList * txl
DRWShadingGroup * outline_shgrp
blender::gpu::Batch * outline_geom
GPUFrameBuffer * outlines_prepass_fb
GPUFrameBuffer * outlines_resolve_fb
DRWPass * outlines_detect_ps
DRWPass * outlines_prepass_ps
DRWShadingGroup * outlines_gpencil_grp
struct OVERLAY_PrivateData::@037073235072154075117250143020005176272251117035 antialiasing
bool xray_enabled_and_not_wire
DRWShadingGroup * outlines_grp
DRWShadingGroup * outlines_curves_grp
DRWShadingGroup * outlines_ptcloud_grp
GPUTexture * outlines_id_tx
GPUTexture * temp_depth_tx
DRWShadingGroup * stroke_grp