DRW: Remove the use of GPUTexture buffers for edit wire rendering
[blender.git] / source / blender / draw / intern / draw_cache.h
1 /*
2  * Copyright 2016, Blender Foundation.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * Contributor(s): Blender Institute
19  *
20  */
21
22 /** \file draw_cache.h
23  *  \ingroup draw
24  */
25
26 #ifndef __DRAW_CACHE_H__
27 #define __DRAW_CACHE_H__
28
29 struct GPUBatch;
30 struct GPUMaterial;
31 struct ModifierData;
32 struct Object;
33 struct PTCacheEdit;
34
35 void DRW_shape_cache_free(void);
36 void DRW_shape_cache_reset(void);
37
38 /* 3D cursor */
39 struct GPUBatch *DRW_cache_cursor_get(bool crosshair_lines);
40
41 /* Common Shapes */
42 struct GPUBatch *DRW_cache_grid_get(void);
43 struct GPUBatch *DRW_cache_fullscreen_quad_get(void);
44 struct GPUBatch *DRW_cache_quad_get(void);
45 struct GPUBatch *DRW_cache_cube_get(void);
46 struct GPUBatch *DRW_cache_sphere_get(void);
47 struct GPUBatch *DRW_cache_single_vert_get(void);
48 struct GPUBatch *DRW_cache_single_line_get(void);
49 struct GPUBatch *DRW_cache_single_line_endpoints_get(void);
50 struct GPUBatch *DRW_cache_screenspace_circle_get(void);
51
52 /* Common Object */
53 struct GPUBatch *DRW_cache_object_wire_outline_get(struct Object *ob);
54 struct GPUBatch *DRW_cache_object_edge_detection_get(struct Object *ob, bool *r_is_manifold);
55 struct GPUBatch *DRW_cache_object_surface_get(struct Object *ob);
56 struct GPUBatch *DRW_cache_object_surface_get_ex(struct Object *ob, bool use_hide);
57 struct GPUBatch *DRW_cache_object_loose_edges_get(struct Object *ob);
58 struct GPUBatch **DRW_cache_object_surface_material_get(
59         struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len, bool use_hide,
60         char **auto_layer_names, int **auto_layer_is_srgb, int *auto_layer_count);
61 struct GPUBatch *DRW_cache_object_face_wireframe_get(Object *ob);
62
63 /* Empties */
64 struct GPUBatch *DRW_cache_plain_axes_get(void);
65 struct GPUBatch *DRW_cache_single_arrow_get(void);
66 struct GPUBatch *DRW_cache_empty_cube_get(void);
67 struct GPUBatch *DRW_cache_circle_get(void);
68 struct GPUBatch *DRW_cache_square_get(void);
69 struct GPUBatch *DRW_cache_empty_sphere_get(void);
70 struct GPUBatch *DRW_cache_empty_cylinder_get(void);
71 struct GPUBatch *DRW_cache_empty_cone_get(void);
72 struct GPUBatch *DRW_cache_empty_capsule_cap_get(void);
73 struct GPUBatch *DRW_cache_empty_capsule_body_get(void);
74 struct GPUBatch *DRW_cache_image_plane_get(void);
75 struct GPUBatch *DRW_cache_image_plane_wire_get(void);
76
77 /* Force Field */
78 struct GPUBatch *DRW_cache_field_wind_get(void);
79 struct GPUBatch *DRW_cache_field_force_get(void);
80 struct GPUBatch *DRW_cache_field_vortex_get(void);
81 struct GPUBatch *DRW_cache_field_tube_limit_get(void);
82 struct GPUBatch *DRW_cache_field_cone_limit_get(void);
83
84 /* Grease Pencil */
85 struct GPUBatch *DRW_cache_gpencil_axes_get(void);
86
87 /* Lamps */
88 struct GPUBatch *DRW_cache_lamp_get(void);
89 struct GPUBatch *DRW_cache_lamp_shadows_get(void);
90 struct GPUBatch *DRW_cache_lamp_sunrays_get(void);
91 struct GPUBatch *DRW_cache_lamp_area_square_get(void);
92 struct GPUBatch *DRW_cache_lamp_area_disk_get(void);
93 struct GPUBatch *DRW_cache_lamp_hemi_get(void);
94 struct GPUBatch *DRW_cache_lamp_spot_get(void);
95 struct GPUBatch *DRW_cache_lamp_spot_volume_get(void);
96 struct GPUBatch *DRW_cache_lamp_spot_square_get(void);
97 struct GPUBatch *DRW_cache_lamp_spot_square_volume_get(void);
98
99 /* Camera */
100 struct GPUBatch *DRW_cache_camera_get(void);
101 struct GPUBatch *DRW_cache_camera_frame_get(void);
102 struct GPUBatch *DRW_cache_camera_tria_get(void);
103
104 /* Speaker */
105 struct GPUBatch *DRW_cache_speaker_get(void);
106
107 /* Probe */
108 struct GPUBatch *DRW_cache_lightprobe_cube_get(void);
109 struct GPUBatch *DRW_cache_lightprobe_grid_get(void);
110 struct GPUBatch *DRW_cache_lightprobe_planar_get(void);
111
112 /* Bones */
113 struct GPUBatch *DRW_cache_bone_octahedral_get(void);
114 struct GPUBatch *DRW_cache_bone_octahedral_wire_get(void);
115 struct GPUBatch *DRW_cache_bone_box_get(void);
116 struct GPUBatch *DRW_cache_bone_box_wire_get(void);
117 struct GPUBatch *DRW_cache_bone_envelope_solid_get(void);
118 struct GPUBatch *DRW_cache_bone_envelope_outline_get(void);
119 struct GPUBatch *DRW_cache_bone_envelope_head_wire_outline_get(void);
120 struct GPUBatch *DRW_cache_bone_point_get(void);
121 struct GPUBatch *DRW_cache_bone_point_wire_outline_get(void);
122 struct GPUBatch *DRW_cache_bone_stick_get(void);
123 struct GPUBatch *DRW_cache_bone_arrows_get(void);
124 struct GPUBatch *DRW_cache_bone_dof_sphere_get(void);
125 struct GPUBatch *DRW_cache_bone_dof_lines_get(void);
126
127 /* Meshes */
128 struct GPUBatch *DRW_cache_mesh_surface_overlay_get(struct Object *ob);
129 void DRW_cache_mesh_wire_overlay_get(
130         struct Object *ob,
131         struct GPUBatch **r_tris, struct GPUBatch **r_ledges, struct GPUBatch **r_lverts);
132 void DRW_cache_mesh_normals_overlay_get(
133         struct Object *ob,
134         struct GPUBatch **r_tris, struct GPUBatch **r_tris_lnor,
135         struct GPUBatch **r_ledges, struct GPUBatch **r_lverts);
136 struct GPUBatch *DRW_cache_face_centers_get(struct Object *ob);
137 struct GPUBatch *DRW_cache_mesh_wire_outline_get(struct Object *ob);
138 struct GPUBatch *DRW_cache_mesh_edge_detection_get(struct Object *ob, bool *r_is_manifold);
139 struct GPUBatch *DRW_cache_mesh_surface_get(struct Object *ob, bool use_hide);
140 struct GPUBatch *DRW_cache_mesh_loose_edges_get(struct Object *ob);
141 struct GPUBatch *DRW_cache_mesh_surface_weights_get(struct Object *ob, struct ToolSettings *ts, bool paint_mode);
142 struct GPUBatch *DRW_cache_mesh_surface_vert_colors_get(struct Object *ob);
143 struct GPUBatch *DRW_cache_mesh_surface_verts_get(struct Object *ob);
144 struct GPUBatch *DRW_cache_mesh_edges_get(struct Object *ob);
145 struct GPUBatch *DRW_cache_mesh_verts_get(struct Object *ob);
146 struct GPUBatch *DRW_cache_mesh_edges_paint_overlay_get(struct Object *ob, bool use_wire, bool use_sel);
147 struct GPUBatch *DRW_cache_mesh_faces_weight_overlay_get(struct Object *ob);
148 struct GPUBatch *DRW_cache_mesh_verts_weight_overlay_get(struct Object *ob);
149 struct GPUBatch **DRW_cache_mesh_surface_shaded_get(
150         struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len, bool use_hide,
151         char **auto_layer_names, int **auto_layer_is_srgb, int *auto_layer_count);
152 struct GPUBatch **DRW_cache_mesh_surface_texpaint_get(struct Object *ob, bool use_hide);
153 struct GPUBatch *DRW_cache_mesh_surface_texpaint_single_get(struct Object *ob);
154 struct GPUBatch *DRW_cache_mesh_face_wireframe_get(struct Object *ob);
155
156 void DRW_cache_mesh_sculpt_coords_ensure(struct Object *ob);
157
158 /* Curve */
159 struct GPUBatch *DRW_cache_curve_surface_get(struct Object *ob);
160 struct GPUBatch **DRW_cache_curve_surface_shaded_get(
161         struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
162 struct GPUBatch *DRW_cache_curve_surface_verts_get(struct Object *ob);
163 struct GPUBatch *DRW_cache_curve_edge_wire_get(struct Object *ob);
164 struct GPUBatch *DRW_cache_curve_face_wireframe_get(Object *ob);
165 /* edit-mode */
166 struct GPUBatch *DRW_cache_curve_edge_normal_get(struct Object *ob, float normal_size);
167 struct GPUBatch *DRW_cache_curve_edge_overlay_get(struct Object *ob);
168 struct GPUBatch *DRW_cache_curve_vert_overlay_get(struct Object *ob, bool handles);
169
170 /* Font */
171 struct GPUBatch *DRW_cache_text_edge_wire_get(struct Object *ob);
172 struct GPUBatch *DRW_cache_text_surface_get(struct Object *ob);
173 struct GPUBatch **DRW_cache_text_surface_shaded_get(
174         struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
175 struct GPUBatch *DRW_cache_text_face_wireframe_get(Object *ob);
176 /* edit-mode */
177 struct GPUBatch *DRW_cache_text_cursor_overlay_get(struct Object *ob);
178 struct GPUBatch *DRW_cache_text_select_overlay_get(struct Object *ob);
179
180 /* Surface */
181 struct GPUBatch *DRW_cache_surf_surface_get(struct Object *ob);
182 struct GPUBatch **DRW_cache_surf_surface_shaded_get(
183         struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
184 struct GPUBatch *DRW_cache_surf_face_wireframe_get(Object *ob);
185
186 /* Lattice */
187 struct GPUBatch *DRW_cache_lattice_verts_get(struct Object *ob);
188 struct GPUBatch *DRW_cache_lattice_wire_get(struct Object *ob, bool use_weight);
189 struct GPUBatch *DRW_cache_lattice_vert_overlay_get(struct Object *ob);
190
191 /* Particles */
192 struct GPUBatch *DRW_cache_particles_get_hair(
193         struct Object *object, struct ParticleSystem *psys, struct ModifierData *md);
194 struct GPUBatch *DRW_cache_particles_get_dots(
195         struct Object *object, struct ParticleSystem *psys);
196 struct GPUBatch *DRW_cache_particles_get_edit_strands(
197         struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit, bool use_weight);
198 struct GPUBatch *DRW_cache_particles_get_edit_inner_points(
199         struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit);
200 struct GPUBatch *DRW_cache_particles_get_edit_tip_points(
201         struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit);
202 struct GPUBatch *DRW_cache_particles_get_prim(int type);
203
204 /* Metaball */
205 struct GPUBatch *DRW_cache_mball_surface_get(struct Object *ob);
206 struct GPUBatch **DRW_cache_mball_surface_shaded_get(struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len);
207 struct GPUBatch *DRW_cache_mball_face_wireframe_get(Object *ob);
208
209 #endif /* __DRAW_CACHE_H__ */