From 9516921c05bd9fee5c94942eb8e38f47ba7e4351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Mon, 2 Dec 2019 01:40:58 +0100 Subject: Overlay Engine: Refactor & Cleanup This is the unification of all overlays into one overlay engine as described in T65347. I went over all the code making it more future proof with less hacks and removing old / not relevent parts. Goals / Acheivements: - Remove internal shader usage (only drw shaders) - Remove viewportSize and viewportSizeInv and put them in gloabl ubo - Fixed some drawing issues: Missing probe option and Missing Alt+B clipping of some shader - Remove old (legacy) shaders dependancy (not using view UBO). - Less shader variation (less compilation time at first load and less patching needed for vulkan) - removed some geom shaders when I could - Remove static e_data (except shaders storage where it is OK) - Clear the way to fix some anoying limitations (dithered transparency, background image compositing etc...) - Wireframe drawing now uses the same batching capabilities as workbench & eevee (indirect drawing). - Reduced complexity, removed ~3000 Lines of code in draw (also removed a lot of unused shader in GPU). - Post AA to avoid complexity and cost of MSAA. Remaining issues: - ~~Armature edits, overlay toggles, (... others?) are not refreshing viewport after AA is complete~~ - FXAA is not the best for wires, maybe investigate SMAA - Maybe do something more temporally stable for AA. - ~~Paint overlays are not working with AA.~~ - ~~infront objects are difficult to select.~~ - ~~the infront wires sometimes goes through they solid counterpart (missing clear maybe?) (toggle overlays on-off when using infront+wireframe overlay in solid shading)~~ Note: I made some decision to change slightly the appearance of some objects to simplify their drawing. Namely the empty arrows end (which is now hollow/wire) and distance points of the cameras/spots being done by lines. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D6296 --- .../blender/draw/engines/overlay/overlay_private.h | 585 +++++++++++++++++++++ 1 file changed, 585 insertions(+) create mode 100644 source/blender/draw/engines/overlay/overlay_private.h (limited to 'source/blender/draw/engines/overlay/overlay_private.h') diff --git a/source/blender/draw/engines/overlay/overlay_private.h b/source/blender/draw/engines/overlay/overlay_private.h new file mode 100644 index 00000000000..6b030b65ac0 --- /dev/null +++ b/source/blender/draw/engines/overlay/overlay_private.h @@ -0,0 +1,585 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Copyright 2019, Blender Foundation. + */ + +/** \file + * \ingroup DNA + */ + +#ifndef __OVERLAY_PRIVATE_H__ +#define __OVERLAY_PRIVATE_H__ + +#ifdef __APPLE__ +# define USE_GEOM_SHADER_WORKAROUND 1 +#else +# define USE_GEOM_SHADER_WORKAROUND 0 +#endif + +typedef struct OVERLAY_FramebufferList { + struct GPUFrameBuffer *overlay_default_fb; + struct GPUFrameBuffer *overlay_line_fb; + struct GPUFrameBuffer *overlay_color_only_fb; + struct GPUFrameBuffer *overlay_in_front_fb; + struct GPUFrameBuffer *outlines_prepass_fb; + struct GPUFrameBuffer *outlines_process_fb[2]; +} OVERLAY_FramebufferList; + +typedef struct OVERLAY_TextureList { + struct GPUTexture *temp_depth_tx; + struct GPUTexture *dummy_depth_tx; + struct GPUTexture *outlines_id_tx; + struct GPUTexture *outlines_color_tx[2]; + struct GPUTexture *overlay_color_tx; + struct GPUTexture *overlay_color_history_tx; + struct GPUTexture *overlay_line_tx; + struct GPUTexture *edit_mesh_occlude_wire_tx; +} OVERLAY_TextureList; + +#define NOT_IN_FRONT 0 +#define IN_FRONT 1 + +typedef struct OVERLAY_PassList { + DRWPass *antialiasing_ps; + DRWPass *armature_ps[2]; + DRWPass *armature_bone_select_ps; + DRWPass *armature_transp_ps; + DRWPass *edit_curve_wire_ps[2]; + DRWPass *edit_curve_handle_ps; + DRWPass *edit_lattice_ps; + DRWPass *edit_mesh_depth_ps[2]; + DRWPass *edit_mesh_verts_ps[2]; + DRWPass *edit_mesh_edges_ps[2]; + DRWPass *edit_mesh_faces_ps[2]; + DRWPass *edit_mesh_faces_cage_ps[2]; + DRWPass *edit_mesh_analysis_ps; + DRWPass *edit_mesh_normals_ps; + DRWPass *edit_mesh_weight_ps; + DRWPass *edit_particle_ps; + DRWPass *edit_text_overlay_ps; + DRWPass *edit_text_wire_ps[2]; + DRWPass *extra_ps[2]; + DRWPass *extra_blend_ps; + DRWPass *extra_centers_ps; + DRWPass *facing_ps; + DRWPass *grid_ps; + DRWPass *image_background_under_ps; + DRWPass *image_background_over_ps; + DRWPass *image_empties_ps; + DRWPass *image_empties_back_ps; + DRWPass *image_empties_blend_ps; + DRWPass *image_empties_front_ps; + DRWPass *image_foreground_ps; + DRWPass *metaball_ps[2]; + DRWPass *motion_paths_ps; + DRWPass *outlines_prepass_ps; + DRWPass *outlines_detect_ps; + DRWPass *outlines_expand_ps; + DRWPass *outlines_bleed_ps; + DRWPass *outlines_resolve_ps; + DRWPass *paint_color_ps; + DRWPass *paint_overlay_ps; + DRWPass *particle_ps; + DRWPass *sculpt_mask_ps; + DRWPass *wireframe_ps; + DRWPass *wireframe_xray_ps; +} OVERLAY_PassList; + +/* Data used by GLSL shader. To be used as UBO. */ +typedef struct OVERLAY_ShadingData { + /** Grid */ + float grid_axes[3], grid_distance; + float zplane_axes[3], grid_mesh_size; + float grid_steps[8]; + float inv_viewport_size[2]; + float grid_line_size; + int grid_flag; + int zpos_flag; + int zneg_flag; + /** Wireframe */ + float wire_step_param; + /** Edit Curve */ + float edit_curve_normal_length; + /** Edit Mesh */ + int data_mask[4]; +} OVERLAY_ShadingData; + +typedef struct OVERLAY_ExtraCallBuffers { + DRWCallBuffer *camera_frame; + DRWCallBuffer *camera_tria[2]; + DRWCallBuffer *camera_distances; + DRWCallBuffer *camera_volume; + DRWCallBuffer *camera_volume_frame; + + DRWCallBuffer *center_active; + DRWCallBuffer *center_selected; + DRWCallBuffer *center_deselected; + DRWCallBuffer *center_selected_lib; + DRWCallBuffer *center_deselected_lib; + + DRWCallBuffer *empty_axes; + DRWCallBuffer *empty_capsule_body; + DRWCallBuffer *empty_capsule_cap; + DRWCallBuffer *empty_circle; + DRWCallBuffer *empty_cone; + DRWCallBuffer *empty_cube; + DRWCallBuffer *empty_cylinder; + DRWCallBuffer *empty_image_frame; + DRWCallBuffer *empty_plain_axes; + DRWCallBuffer *empty_single_arrow; + DRWCallBuffer *empty_sphere; + DRWCallBuffer *empty_sphere_solid; + + DRWCallBuffer *extra_dashed_lines; + DRWCallBuffer *extra_lines; + + DRWCallBuffer *field_curve; + DRWCallBuffer *field_force; + DRWCallBuffer *field_vortex; + DRWCallBuffer *field_wind; + DRWCallBuffer *field_cone_limit; + DRWCallBuffer *field_sphere_limit; + DRWCallBuffer *field_tube_limit; + + DRWCallBuffer *groundline; + + DRWCallBuffer *light_point; + DRWCallBuffer *light_sun; + DRWCallBuffer *light_spot; + DRWCallBuffer *light_spot_cone_back; + DRWCallBuffer *light_spot_cone_front; + DRWCallBuffer *light_area[2]; + + DRWCallBuffer *origin_xform; + + DRWCallBuffer *probe_planar; + DRWCallBuffer *probe_cube; + DRWCallBuffer *probe_grid; + + DRWCallBuffer *speaker; + + DRWShadingGroup *extra_wire; + DRWShadingGroup *extra_loose_points; +} OVERLAY_ExtraCallBuffers; + +typedef struct OVERLAY_ArmatureCallBuffers { + DRWCallBuffer *box_outline; + DRWCallBuffer *box_solid; + + DRWCallBuffer *dof_lines; + DRWCallBuffer *dof_sphere; + + DRWCallBuffer *envelope_distance; + DRWCallBuffer *envelope_outline; + DRWCallBuffer *envelope_solid; + + DRWCallBuffer *octa_outline; + DRWCallBuffer *octa_solid; + + DRWCallBuffer *point_outline; + DRWCallBuffer *point_solid; + + DRWCallBuffer *stick; + + DRWCallBuffer *wire; + + DRWShadingGroup *custom_solid; + DRWShadingGroup *custom_outline; + GHash *custom_shapes_ghash; +} OVERLAY_ArmatureCallBuffers; + +typedef struct OVERLAY_PrivateData { + DRWShadingGroup *armature_bone_select_act_grp; + DRWShadingGroup *armature_bone_select_grp; + DRWShadingGroup *edit_curve_normal_grp[2]; + DRWShadingGroup *edit_curve_wire_grp[2]; + DRWShadingGroup *edit_curve_handle_grp; + DRWShadingGroup *edit_curve_points_grp; + DRWShadingGroup *edit_lattice_points_grp; + DRWShadingGroup *edit_lattice_wires_grp; + DRWShadingGroup *edit_mesh_depth_grp[2]; + DRWShadingGroup *edit_mesh_faces_grp[2]; + DRWShadingGroup *edit_mesh_faces_cage_grp[2]; + DRWShadingGroup *edit_mesh_verts_grp[2]; + DRWShadingGroup *edit_mesh_edges_grp[2]; + DRWShadingGroup *edit_mesh_facedots_grp[2]; + DRWShadingGroup *edit_mesh_skin_roots_grp[2]; + DRWShadingGroup *edit_mesh_normals_grp; + DRWShadingGroup *edit_mesh_analysis_grp; + DRWShadingGroup *edit_mesh_weight_grp; + DRWShadingGroup *edit_particle_strand_grp; + DRWShadingGroup *edit_particle_point_grp; + DRWShadingGroup *edit_text_overlay_grp; + DRWShadingGroup *edit_text_wire_grp[2]; + DRWShadingGroup *facing_grp; + DRWShadingGroup *motion_path_lines_grp; + DRWShadingGroup *motion_path_points_grp; + DRWShadingGroup *outlines_active_grp; + DRWShadingGroup *outlines_select_grp; + DRWShadingGroup *outlines_select_dupli_grp; + DRWShadingGroup *outlines_transform_grp; + DRWShadingGroup *outlines_probe_transform_grp; + DRWShadingGroup *outlines_probe_select_grp; + DRWShadingGroup *outlines_probe_select_dupli_grp; + DRWShadingGroup *outlines_probe_active_grp; + DRWShadingGroup *outlines_probe_grid_grp; + DRWShadingGroup *paint_surf_grp; + DRWShadingGroup *paint_wire_grp; + DRWShadingGroup *paint_wire_selected_grp; + DRWShadingGroup *paint_point_grp; + DRWShadingGroup *paint_face_grp; + DRWShadingGroup *particle_dots_grp; + DRWShadingGroup *particle_shapes_grp; + DRWShadingGroup *sculpt_mask_grp; + DRWShadingGroup *wires_grp[2][2]; /* With and without coloring. */ + DRWShadingGroup *wires_all_grp[2][2]; /* With and without coloring. */ + DRWShadingGroup *wires_sculpt_grp[2]; + + DRWView *view_default; + DRWView *view_wires; + DRWView *view_edit_faces; + DRWView *view_edit_faces_cage; + DRWView *view_edit_edges; + DRWView *view_edit_verts; + DRWView *view_reference_images; + + /** TODO get rid of this. */ + ListBase smoke_domains; + ListBase bg_movie_clips; + + /** Two instances for in_front option and without. */ + OVERLAY_ExtraCallBuffers extra_call_buffers[2]; + + OVERLAY_ArmatureCallBuffers armature_call_buffers[2]; + + View3DOverlay overlay; + enum eContextObjectMode ctx_mode; + bool clear_in_front; + bool wireframe_mode; + bool hide_overlays; + bool xray_enabled; + bool xray_enabled_and_not_wire; + short v3d_flag; /* TODO move to View3DOverlay */ + short v3d_gridflag; /* TODO move to View3DOverlay */ + DRWState clipping_state; + OVERLAY_ShadingData shdata; + + struct { + short sample; + short target_sample; + float prev_persmat[4][4]; + bool enabled; + } antialiasing; + struct { + bool show_handles; + } edit_curve; + struct { + int ghost_ob; + int edit_ob; + bool do_zbufclip; + bool do_faces; + bool do_edges; + bool select_vert; + bool select_face; + bool select_edge; + int flag; /** Copy of v3d->overlay.edit_flag. */ + } edit_mesh; + struct { + bool use_weight; + int select_mode; + } edit_particle; + struct { + bool transparent; + bool show_relations; + bool do_pose_fade_geom; + } armature; + struct { + DRWCallBuffer *handle[2]; + } mball; +} OVERLAY_PrivateData; /* Transient data */ + +typedef struct OVERLAY_StorageList { + struct OVERLAY_PrivateData *pd; +} OVERLAY_StorageList; + +typedef struct OVERLAY_Data { + void *engine_type; + OVERLAY_FramebufferList *fbl; + OVERLAY_TextureList *txl; + OVERLAY_PassList *psl; + OVERLAY_StorageList *stl; +} OVERLAY_Data; + +typedef struct OVERLAY_DupliData { + DRWShadingGroup *wire_shgrp; + DRWShadingGroup *outline_shgrp; + DRWShadingGroup *extra_shgrp; + struct GPUBatch *wire_geom; + struct GPUBatch *outline_geom; + struct GPUBatch *extra_geom; + short base_flag; +} OVERLAY_DupliData; + +typedef struct BoneInstanceData { + /* Keep sync with bone instance vertex format (OVERLAY_InstanceFormats) */ + union { + float mat[4][4]; + struct { + float _pad0[3], color_hint_a; + float _pad1[3], color_hint_b; + float _pad2[3], color_a; + float _pad3[3], color_b; + }; + struct { + float _pad00[3], amin_a; + float _pad01[3], amin_b; + float _pad02[3], amax_a; + float _pad03[3], amax_b; + }; + }; +} BoneInstanceData; + +typedef struct OVERLAY_InstanceFormats { + struct GPUVertFormat *instance_pos; + struct GPUVertFormat *instance_extra; + struct GPUVertFormat *instance_bone; + struct GPUVertFormat *instance_bone_outline; + struct GPUVertFormat *instance_bone_envelope; + struct GPUVertFormat *instance_bone_envelope_distance; + struct GPUVertFormat *instance_bone_envelope_outline; + struct GPUVertFormat *instance_bone_stick; + struct GPUVertFormat *pos; + struct GPUVertFormat *pos_color; + struct GPUVertFormat *wire_extra; +} OVERLAY_InstanceFormats; + +/* Pack data into the last row of the 4x4 matrix. It will be decoded by the vertex shader. */ +BLI_INLINE void pack_data_in_mat4( + float rmat[4][4], const float mat[4][4], float a, float b, float c, float d) +{ + copy_m4_m4(rmat, mat); + rmat[0][3] = a; + rmat[1][3] = b; + rmat[2][3] = c; + rmat[3][3] = d; +} + +BLI_INLINE void pack_v4_in_mat4(float rmat[4][4], const float mat[4][4], const float v[4]) +{ + pack_data_in_mat4(rmat, mat, v[0], v[1], v[2], v[3]); +} + +BLI_INLINE void pack_fl_in_mat4(float rmat[4][4], const float mat[4][4], float a) +{ + copy_m4_m4(rmat, mat); + rmat[3][3] = a; +} + +void OVERLAY_antialiasing_reset(OVERLAY_Data *vedata); +void OVERLAY_antialiasing_init(OVERLAY_Data *vedata); +void OVERLAY_antialiasing_cache_init(OVERLAY_Data *vedata); +void OVERLAY_antialiasing_cache_finish(OVERLAY_Data *vedata); +void OVERLAY_antialiasing_start(OVERLAY_Data *vedata); +void OVERLAY_antialiasing_end(OVERLAY_Data *vedata); + +bool OVERLAY_armature_is_pose_mode(Object *ob, const struct DRWContextState *draw_ctx); +void OVERLAY_armature_cache_init(OVERLAY_Data *vedata); +void OVERLAY_armature_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_armature_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_pose_armature_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_armature_cache_finish(OVERLAY_Data *vedata); +void OVERLAY_armature_draw(OVERLAY_Data *vedata); +void OVERLAY_armature_in_front_draw(OVERLAY_Data *vedata); +void OVERLAY_pose_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_pose_draw(OVERLAY_Data *vedata); + +void OVERLAY_bone_instance_data_set_color_hint(BoneInstanceData *data, const float hint_color[4]); +void OVERLAY_bone_instance_data_set_color(BoneInstanceData *data, const float bone_color[4]); + +void OVERLAY_edit_curve_init(OVERLAY_Data *vedata); +void OVERLAY_edit_curve_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_curve_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_surf_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_curve_draw(OVERLAY_Data *vedata); + +void OVERLAY_edit_lattice_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_lattice_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_lattice_draw(OVERLAY_Data *vedata); + +void OVERLAY_edit_text_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_text_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_text_draw(OVERLAY_Data *vedata); + +void OVERLAY_edit_mesh_init(OVERLAY_Data *vedata); +void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_mesh_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_mesh_draw(OVERLAY_Data *vedata); + +void OVERLAY_edit_particle_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_particle_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_edit_particle_draw(OVERLAY_Data *vedata); + +void OVERLAY_extra_cache_init(OVERLAY_Data *vedata); +void OVERLAY_extra_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_extra_draw(OVERLAY_Data *vedata); +void OVERLAY_extra_in_front_draw(OVERLAY_Data *vedata); +void OVERLAY_extra_centers_draw(OVERLAY_Data *vedata); + +void OVERLAY_camera_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_empty_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_gpencil_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_light_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_lightprobe_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_speaker_cache_populate(OVERLAY_Data *vedata, Object *ob); + +OVERLAY_ExtraCallBuffers *OVERLAY_extra_call_buffer_get(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_extra_line_dashed(OVERLAY_ExtraCallBuffers *cb, + const float start[3], + const float end[3], + const float color[4]); +void OVERLAY_extra_line(OVERLAY_ExtraCallBuffers *cb, + const float start[3], + const float end[3], + const int color_id); +void OVERLAY_empty_shape(OVERLAY_ExtraCallBuffers *cb, + const float mat[4][4], + const float draw_size, + const char draw_type, + const float color[4]); +void OVERLAY_extra_loose_points(OVERLAY_ExtraCallBuffers *cb, + struct GPUBatch *geom, + const float mat[4][4], + const float color[4]); +void OVERLAY_extra_wire(OVERLAY_ExtraCallBuffers *cb, + struct GPUBatch *geom, + const float mat[4][4], + const float color[4]); + +void OVERLAY_facing_init(OVERLAY_Data *vedata); +void OVERLAY_facing_cache_init(OVERLAY_Data *vedata); +void OVERLAY_facing_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_facing_draw(OVERLAY_Data *vedata); + +void OVERLAY_grid_init(OVERLAY_Data *vedata); +void OVERLAY_grid_cache_init(OVERLAY_Data *vedata); +void OVERLAY_grid_draw(OVERLAY_Data *vedata); + +void OVERLAY_image_init(OVERLAY_Data *vedata); +void OVERLAY_image_cache_init(OVERLAY_Data *vedata); +void OVERLAY_image_camera_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_image_cache_finish(OVERLAY_Data *vedata); +void OVERLAY_image_draw(OVERLAY_Data *vedata); +void OVERLAY_image_in_front_draw(OVERLAY_Data *vedata); + +void OVERLAY_metaball_cache_init(OVERLAY_Data *vedata); +void OVERLAY_edit_metaball_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_metaball_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_metaball_draw(OVERLAY_Data *vedata); +void OVERLAY_metaball_in_front_draw(OVERLAY_Data *vedata); + +void OVERLAY_motion_path_cache_init(OVERLAY_Data *vedata); +void OVERLAY_motion_path_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_motion_path_draw(OVERLAY_Data *vedata); + +void OVERLAY_outline_init(OVERLAY_Data *vedata); +void OVERLAY_outline_cache_init(OVERLAY_Data *vedata); +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_paint_cache_init(OVERLAY_Data *vedata); +void OVERLAY_paint_texture_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_paint_vertex_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_paint_weight_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_paint_draw(OVERLAY_Data *vedata); + +void OVERLAY_particle_cache_init(OVERLAY_Data *vedata); +void OVERLAY_particle_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_particle_draw(OVERLAY_Data *vedata); + +void OVERLAY_sculpt_cache_init(OVERLAY_Data *vedata); +void OVERLAY_sculpt_cache_populate(OVERLAY_Data *vedata, Object *ob); +void OVERLAY_sculpt_draw(OVERLAY_Data *vedata); + +void OVERLAY_wireframe_init(OVERLAY_Data *vedata); +void OVERLAY_wireframe_cache_init(OVERLAY_Data *vedata); +void OVERLAY_wireframe_cache_populate(OVERLAY_Data *vedata, + Object *ob, + OVERLAY_DupliData *dupli, + bool init_dupli); +void OVERLAY_wireframe_draw(OVERLAY_Data *vedata); +void OVERLAY_wireframe_in_front_draw(OVERLAY_Data *vedata); + +GPUShader *OVERLAY_shader_antialiasing(void); +GPUShader *OVERLAY_shader_armature_degrees_of_freedom(void); +GPUShader *OVERLAY_shader_armature_envelope(bool use_outline); +GPUShader *OVERLAY_shader_armature_shape(bool use_outline); +GPUShader *OVERLAY_shader_armature_sphere(bool use_outline); +GPUShader *OVERLAY_shader_armature_stick(void); +GPUShader *OVERLAY_shader_armature_wire(void); +GPUShader *OVERLAY_shader_depth_only(void); +GPUShader *OVERLAY_shader_edit_curve_handle(void); +GPUShader *OVERLAY_shader_edit_curve_point(void); +GPUShader *OVERLAY_shader_edit_curve_wire(void); +GPUShader *OVERLAY_shader_edit_lattice_point(void); +GPUShader *OVERLAY_shader_edit_lattice_wire(void); +GPUShader *OVERLAY_shader_edit_mesh_analysis(void); +GPUShader *OVERLAY_shader_edit_mesh_edge(bool use_flat_interp); +GPUShader *OVERLAY_shader_edit_mesh_face(void); +GPUShader *OVERLAY_shader_edit_mesh_facedot(void); +GPUShader *OVERLAY_shader_edit_mesh_normal(void); +GPUShader *OVERLAY_shader_edit_mesh_skin_root(void); +GPUShader *OVERLAY_shader_edit_mesh_vert(void); +GPUShader *OVERLAY_shader_edit_particle_strand(void); +GPUShader *OVERLAY_shader_edit_particle_point(void); +GPUShader *OVERLAY_shader_extra(void); +GPUShader *OVERLAY_shader_extra_groundline(void); +GPUShader *OVERLAY_shader_extra_wire(bool use_object); +GPUShader *OVERLAY_shader_extra_loose_point(void); +GPUShader *OVERLAY_shader_extra_point(void); +GPUShader *OVERLAY_shader_facing(void); +GPUShader *OVERLAY_shader_grid(void); +GPUShader *OVERLAY_shader_image(void); +GPUShader *OVERLAY_shader_motion_path_line(void); +GPUShader *OVERLAY_shader_motion_path_vert(void); +GPUShader *OVERLAY_shader_uniform_color(void); +GPUShader *OVERLAY_shader_outline_prepass(bool use_wire); +GPUShader *OVERLAY_shader_outline_prepass_grid(void); +GPUShader *OVERLAY_shader_outline_resolve(void); +GPUShader *OVERLAY_shader_outline_expand(bool high_dpi); +GPUShader *OVERLAY_shader_outline_detect(bool use_wire); +GPUShader *OVERLAY_shader_paint_face(void); +GPUShader *OVERLAY_shader_paint_point(void); +GPUShader *OVERLAY_shader_paint_texture(void); +GPUShader *OVERLAY_shader_paint_vertcol(void); +GPUShader *OVERLAY_shader_paint_weight(void); +GPUShader *OVERLAY_shader_paint_wire(void); +GPUShader *OVERLAY_shader_particle_dot(void); +GPUShader *OVERLAY_shader_particle_shape(void); +GPUShader *OVERLAY_shader_sculpt_mask(void); +GPUShader *OVERLAY_shader_volume_velocity(bool use_needle); +GPUShader *OVERLAY_shader_wireframe(void); +GPUShader *OVERLAY_shader_wireframe_select(void); + +OVERLAY_InstanceFormats *OVERLAY_shader_instance_formats_get(void); + +void OVERLAY_shader_free(void); + +#endif /* __OVERLAY_PRIVATE_H__ */ \ No newline at end of file -- cgit v1.2.3