20 PassMain outline_prepass_ps_ = {
"Prepass"};
37 overlay::GreasePencil::ViewParameters grease_pencil_view;
57 const bool do_expand = (
U.pixelsize > 1.0) || (outline_width > 2.0f);
61 auto &pass = outline_prepass_ps_;
63 pass.framebuffer_set(&prepass_fb_);
64 pass.clear_color_depth_stencil(
float4(0.0f), 1.0f, 0x0);
66 state.clipping_plane_count);
68 auto &sub = pass.sub(
"Curves");
70 sub.push_constant(
"isTransform", is_transform);
72 prepass_curves_ps_ = ⊂
75 auto &sub = pass.
sub(
"PointCloud");
77 sub.push_constant(
"isTransform", is_transform);
79 prepass_pointcloud_ps_ = ⊂
82 auto &sub = pass.
sub(
"GreasePencil");
84 sub.push_constant(
"isTransform", is_transform);
86 prepass_gpencil_ps_ = ⊂
89 auto &sub = pass.
sub(
"Mesh");
91 sub.push_constant(
"isTransform", is_transform);
93 prepass_mesh_ps_ = ⊂
96 auto &sub = pass.
sub(
"Volume");
98 sub.push_constant(
"isTransform", is_transform);
100 prepass_volume_ps_ = ⊂
103 auto &sub = pass.
sub(
"Wire");
105 sub.push_constant(
"isTransform", is_transform);
107 prepass_wire_ps_ = ⊂
111 auto &pass = outline_resolve_ps_;
117 pass.push_constant(
"alphaOcclu",
state.xray_enabled ? 1.0f : 0.35f);
118 pass.push_constant(
"doThickOutlines", do_expand);
119 pass.push_constant(
"doAntiAliasing", do_smooth_lines);
120 pass.push_constant(
"isXrayWires",
state.xray_enabled_and_not_wire);
121 pass.bind_texture(
"outlineId", &object_id_tx_);
122 pass.bind_texture(
"sceneDepth", &res.
depth_tx);
123 pass.bind_texture(
"outlineDepth", &tmp_depth_tx_);
150 GreasePencil::draw_grease_pencil(*prepass_gpencil_ps_,
157 if (!
state.xray_enabled_and_not_wire) {
168 bool is_flat_object_viewed_from_side = ((
state.rv3d->persp ==
RV3D_ORTHO) &&
172 if (
state.xray_enabled_and_not_wire || is_flat_object_viewed_from_side) {
182 if (!
state.is_wireframe_mode) {
213 manager.
submit(outline_prepass_ps_, view);
214 manager.
submit(outline_resolve_ps_, view);
@ USER_GPU_FLAG_OVERLAY_SMOOTH_WIRE
void GPU_debug_group_end()
void GPU_debug_group_begin(const char *name)
#define GPU_ATTACHMENT_TEXTURE(_texture)
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
float UI_GetThemeValuef(int colorid)
void ensure(GPUAttachment depth=GPU_ATTACHMENT_NONE, GPUAttachment color1=GPU_ATTACHMENT_NONE, GPUAttachment color2=GPU_ATTACHMENT_NONE, GPUAttachment color3=GPU_ATTACHMENT_NONE, GPUAttachment color4=GPU_ATTACHMENT_NONE, GPUAttachment color5=GPU_ATTACHMENT_NONE, GPUAttachment color6=GPU_ATTACHMENT_NONE, GPUAttachment color7=GPU_ATTACHMENT_NONE, GPUAttachment color8=GPU_ATTACHMENT_NONE)
ResourceHandle unique_handle(const ObjectRef &ref)
void submit(PassSimple &pass, View &view)
void acquire(int2 extent, eGPUTextureFormat format, eGPUTextureUsage usage=GPU_TEXTURE_USAGE_GENERAL)
int3 size(int miplvl=0) const
void draw(gpu::Batch *batch, uint instance_len=-1, uint vertex_len=-1, uint vertex_first=-1, ResourceHandle handle={0}, uint custom_id=0)
PassBase< DrawCommandBufType > & sub(const char *name)
void draw_expand(gpu::Batch *batch, GPUPrimType primitive_type, uint primitive_len, uint instance_len, uint vertex_len=-1, uint vertex_first=-1, ResourceHandle handle={0}, uint custom_id=0)
void shader_set(GPUShader *shader)
void begin_sync(Resources &res, const State &state)
void draw(Resources &res, Manager &manager, View &view)
void object_sync(Manager &manager, const ObjectRef &ob_ref, const State &state)
ShaderPtr outline_prepass_gpencil
ShaderPtr outline_prepass_curves
ShaderPtr outline_prepass_wire
ShaderPtr outline_prepass_mesh
ShaderPtr outline_prepass_pointcloud
blender::gpu::Batch * DRW_cache_mesh_surface_get(Object *ob)
blender::gpu::Batch * DRW_cache_mesh_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)
bool DRW_view_is_persp_get(const DRWView *view)
void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse)
@ DRW_STATE_DEPTH_LESS_EQUAL
@ DRW_STATE_BLEND_ALPHA_PREMUL
gpu::Batch * point_cloud_sub_pass_setup(PassMain::Sub &sub_ps, Object *object, GPUMaterial *gpu_material=nullptr)
gpu::Batch * curves_sub_pass_setup(PassMain::Sub &ps, const Scene *scene, Object *ob, GPUMaterial *gpu_material=nullptr)
blender::gpu::Batch * DRW_cache_volume_selection_surface_get(Object *ob)
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
const c_style_mat & ptr() const
Framebuffer overlay_line_only_fb
GPUUniformBuf * globals_buf