0%

blender_overlay_smoothwires

bookmark

1
2
3
1.gpu_select_pick_load_id 选择对象
2.OVERLAY_outline_draw  绘制outline
3.OVERLAY_shader_outline_prepass

shader

1
2
3
OVERLAY_shader_outline_prepass(overlay_outline_prepass_mesh)
//可以通过overlay_outline_prepass_mesh名字在overlay_edit_mode_info.hh文件中获取shader的代码
overlay_outline_detect(overlay_outline_detect_frag.glsl) // 绘制outline

在glsl中关闭aa

1
2
3
4
if (!doAntiAliasing) {
lineOutput = vec4(0.0);
return;
}

ui-shader数据改变

1
2
3
4
5
6
7
1.PreferencesSystem_use_overlay_smooth_wire_set //ui改变数据
2.OVERLAY_antialiasing_init
 pd->antialiasing.enabled //对OVERLAY_Data赋值是否开启aa
3.OVERLAY_outline_cache_init
 //将变量传入uniform.
 DRW_shgroup_uniform_bool_copy(grp, "doAntiAliasing", pd->antialiasing.enabled);
4.OVERLAY_outline_draw 绘制outline线

draw

shader的overlay_outline_prepass_mesh绘制选择对象的id
shader的overlay_outline_detect绘制outline的颜色和附近的偏移量
shader的overlay_antialiasing绘制 混合进行aa操作

1
2
3
4
5
6
7
8
9
//1.给outlines_prepass_ps和outlines_detect_ps赋值uniform和shader
OVERLAY_outline_cache_init
//2.outlines_prepass_fb和outlines_resolve_fb是上述两个pass的fbo.
//给fbo创建绑定纹理layout
OVERLAY_outline_init
//3.给antialiasing_ps赋值uniform和shader..此处应该是一个pass可以有多个fbo.
OVERLAY_antialiasing_cache_init
//4.overlay_color_only_fb等fbo创建绑定纹理layout
OVERLAY_antialiasing_init

overlay_outline_prepass_mesh

shader:overlay_outline_prepass_vert.glsl

overlay_outline_detect

shader:overlay_outline_detect_frag.glsl

overlay_antialiasing

shader:overlay_antialiasing_frag.glsl
采样器绑定:OVERLAY_antialiasing_cache_init