Blender  V2.93
draw_cache_impl.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * Copyright 2016, Blender Foundation.
17  */
18 
23 #pragma once
24 
25 struct GPUBatch;
26 struct GPUIndexBuf;
27 struct GPUMaterial;
28 struct GPUVertBuf;
29 struct ListBase;
30 struct ModifierData;
31 struct PTCacheEdit;
32 struct ParticleSystem;
33 struct TaskGraph;
34 
35 struct Curve;
36 struct Hair;
37 struct Lattice;
38 struct Mesh;
39 struct MetaBall;
40 struct PointCloud;
41 struct Volume;
42 struct bGPdata;
43 
44 #include "BKE_mesh_types.h"
45 
46 /* Expose via BKE callbacks */
47 void DRW_mball_batch_cache_dirty_tag(struct MetaBall *mb, int mode);
49 void DRW_mball_batch_cache_free(struct MetaBall *mb);
50 
51 void DRW_curve_batch_cache_dirty_tag(struct Curve *cu, int mode);
52 void DRW_curve_batch_cache_validate(struct Curve *cu);
53 void DRW_curve_batch_cache_free(struct Curve *cu);
54 
56 void DRW_mesh_batch_cache_validate(struct Mesh *me);
57 void DRW_mesh_batch_cache_free(struct Mesh *me);
58 
59 void DRW_lattice_batch_cache_dirty_tag(struct Lattice *lt, int mode);
61 void DRW_lattice_batch_cache_free(struct Lattice *lt);
62 
63 void DRW_particle_batch_cache_dirty_tag(struct ParticleSystem *psys, int mode);
65 
67 void DRW_gpencil_batch_cache_free(struct bGPdata *gpd);
68 
69 void DRW_hair_batch_cache_dirty_tag(struct Hair *hair, int mode);
70 void DRW_hair_batch_cache_validate(struct Hair *hair);
71 void DRW_hair_batch_cache_free(struct Hair *hair);
72 
73 void DRW_pointcloud_batch_cache_dirty_tag(struct PointCloud *pointcloud, int mode);
74 void DRW_pointcloud_batch_cache_validate(struct PointCloud *pointcloud);
75 void DRW_pointcloud_batch_cache_free(struct PointCloud *pointcloud);
76 
77 void DRW_volume_batch_cache_dirty_tag(struct Volume *volume, int mode);
78 void DRW_volume_batch_cache_validate(struct Volume *volume);
79 void DRW_volume_batch_cache_free(struct Volume *volume);
80 
81 /* Garbage collection */
82 void DRW_batch_cache_free_old(struct Object *ob, int ctime);
83 
84 void DRW_mesh_batch_cache_free_old(struct Mesh *me, int ctime);
85 
86 /* Generic */
87 void DRW_vertbuf_create_wiredata(struct GPUVertBuf *vbo, const int vert_len);
88 
89 /* Curve */
90 void DRW_curve_batch_cache_create_requested(struct Object *ob, const struct Scene *scene);
91 
92 int DRW_curve_material_count_get(struct Curve *cu);
93 
96 struct GPUBatch *DRW_curve_batch_cache_get_edge_detection(struct Curve *cu, bool *r_is_manifold);
99 
102  struct GPUMaterial **gpumat_array,
103  uint gpumat_array_len);
105 
106 /* Metaball */
108 
111  struct MetaBall *mb,
112  struct GPUMaterial **gpumat_array,
113  uint gpumat_array_len);
116  bool *r_is_manifold);
117 
118 /* DispList */
120  struct GPUVertBuf *vbo,
121  const struct Scene *scene);
122 void DRW_displist_vertbuf_create_wiredata(struct ListBase *lb, struct GPUVertBuf *vbo);
124  struct GPUVertBuf *vbo_pos_nor,
125  struct GPUVertBuf *vbo_uv,
126  struct GPUVertBuf *vbo_tan,
127  const struct Scene *scene);
131  struct GPUIndexBuf **ibo_mat,
132  uint mat_len);
134  struct GPUIndexBuf *ibo,
135  bool *r_is_manifold);
136 
137 /* Lattice */
139  bool use_weight,
140  const int actdef);
143 
144 /* Hair */
145 int DRW_hair_material_count_get(struct Hair *hair);
146 
147 /* PointCloud */
148 int DRW_pointcloud_material_count_get(struct PointCloud *pointcloud);
149 
153  struct GPUMaterial **gpumat_array,
154  uint gpumat_array_len);
155 
156 /* Volume */
157 int DRW_volume_material_count_get(struct Volume *volume);
158 
161 
162 /* Mesh */
164  struct Object *ob,
165  struct Mesh *me,
166  const struct Scene *scene,
167  const bool is_paint_mode,
168  const bool use_hide);
169 
173 struct GPUBatch *DRW_mesh_batch_cache_get_edge_detection(struct Mesh *me, bool *r_is_manifold);
177  struct GPUMaterial **gpumat_array,
178  uint gpumat_array_len);
185 /* edit-mesh drawing */
193 /* edit-mesh selection */
198 /* Object mode Wireframe overlays */
200 /* edit-mesh UV editor */
202  float **tot_area,
203  float **tot_uv_area);
209 /* For Image UV editor. */
212 
213 /* For direct data access. */
217 
218 int DRW_mesh_material_count_get(struct Mesh *me);
219 
220 /* See 'common_globals_lib.glsl' for duplicate defines. */
221 
222 /* Edit mesh bitflags (is this the right place?) */
223 enum {
229  VFLAG_EDGE_SEAM = 1 << 5,
232  /* Beware to not go over 1 << 7 (it's a byte flag). */
233  /* NOTE: Grease pencil edit curve use another type of data format that allows for this value. */
235 };
236 
237 enum {
246  /* Beware to not go over 1 << 7 (it's a byte flag). */
247 };
248 
249 /* Particles */
250 struct GPUBatch *DRW_particles_batch_cache_get_hair(struct Object *object,
251  struct ParticleSystem *psys,
252  struct ModifierData *md);
253 struct GPUBatch *DRW_particles_batch_cache_get_dots(struct Object *object,
254  struct ParticleSystem *psys);
256  struct ParticleSystem *psys,
257  struct PTCacheEdit *edit,
258  bool use_weight);
260  struct ParticleSystem *psys,
261  struct PTCacheEdit *edit);
263  struct ParticleSystem *psys,
264  struct PTCacheEdit *edit);
eMeshBatchDirtyMode
unsigned int uint
Definition: BLI_sys_types.h:83
GPUBatch
Definition: GPU_batch.h:93
struct GPUIndexBuf GPUIndexBuf
struct GPUVertBuf GPUVertBuf
Scene scene
void DRW_displist_indexbuf_create_edges_adjacency_lines(struct ListBase *lb, struct GPUIndexBuf *ibo, bool *r_is_manifold)
struct GPUBatch ** DRW_metaball_batch_cache_get_surface_shaded(struct Object *ob, struct MetaBall *mb, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
struct GPUBatch * DRW_mesh_batch_cache_get_edge_detection(struct Mesh *me, bool *r_is_manifold)
struct GPUBatch * DRW_curve_batch_cache_get_wire_edge(struct Curve *cu)
struct GPUBatch * DRW_particles_batch_cache_get_edit_tip_points(struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit)
struct GPUBatch ** DRW_mesh_batch_cache_get_surface_shaded(struct Mesh *me, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
struct GPUBatch * DRW_pointcloud_batch_cache_get_surface(struct Object *ob)
struct GPUBatch * DRW_curve_batch_cache_get_edit_edges(struct Curve *cu)
void DRW_particle_batch_cache_free(struct ParticleSystem *psys)
void DRW_displist_indexbuf_create_triangles_loop_split_by_material(struct ListBase *lb, struct GPUIndexBuf **ibo_mat, uint mat_len)
void DRW_hair_batch_cache_dirty_tag(struct Hair *hair, int mode)
int DRW_metaball_material_count_get(struct MetaBall *mb)
struct GPUVertBuf * DRW_mesh_batch_cache_pos_vertbuf_get(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_loose_edges(struct Mesh *me)
void DRW_pointcloud_batch_cache_validate(struct PointCloud *pointcloud)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_vertices(struct Mesh *me)
struct GPUBatch * DRW_volume_batch_cache_get_wireframes_face(struct Volume *volume)
struct GPUBatch * DRW_particles_batch_cache_get_edit_strands(struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit, bool use_weight)
struct GPUBatch * DRW_mesh_batch_cache_get_wireframes_face(struct Mesh *me)
void DRW_hair_batch_cache_free(struct Hair *hair)
void DRW_mesh_batch_cache_create_requested(struct TaskGraph *task_graph, struct Object *ob, struct Mesh *me, const struct Scene *scene, const bool is_paint_mode, const bool use_hide)
void DRW_displist_vertbuf_create_wiredata(struct ListBase *lb, struct GPUVertBuf *vbo)
struct GPUBatch * DRW_lattice_batch_cache_get_edit_verts(struct Lattice *lt)
void DRW_curve_batch_cache_free(struct Curve *cu)
void DRW_vertbuf_create_wiredata(struct GPUVertBuf *vbo, const int vert_len)
struct GPUBatch ** DRW_cache_pointcloud_surface_shaded_get(struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
void DRW_lattice_batch_cache_free(struct Lattice *lt)
void DRW_curve_batch_cache_create_requested(struct Object *ob, const struct Scene *scene)
void DRW_batch_cache_free_old(struct Object *ob, int ctime)
Definition: draw_cache.c:3613
struct GPUBatch * DRW_lattice_batch_cache_get_all_edges(struct Lattice *lt, bool use_weight, const int actdef)
struct GPUBatch * DRW_mesh_batch_cache_get_surface_sculpt(struct Mesh *me)
void DRW_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd)
struct GPUBatch * DRW_pointcloud_batch_cache_get_dots(struct Object *ob)
struct GPUBatch * DRW_curve_batch_cache_get_triangles_with_normals(struct Curve *cu)
struct GPUBatch * DRW_volume_batch_cache_get_selection_surface(struct Volume *volume)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_faces(struct Mesh *me)
void DRW_lattice_batch_cache_dirty_tag(struct Lattice *lt, int mode)
void DRW_gpencil_batch_cache_free(struct bGPdata *gpd)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_facedots(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_all_edges(struct Mesh *me)
void DRW_displist_vertbuf_create_loop_pos_and_nor_and_uv_and_tan(struct ListBase *lb, struct GPUVertBuf *vbo_pos_nor, struct GPUVertBuf *vbo_uv, struct GPUVertBuf *vbo_tan, const struct Scene *scene)
struct GPUBatch * DRW_mesh_batch_cache_get_surface_weights(struct Mesh *me)
void DRW_lattice_batch_cache_validate(struct Lattice *lt)
void DRW_volume_batch_cache_free(struct Volume *volume)
struct GPUBatch * DRW_lattice_batch_cache_get_all_verts(struct Lattice *lt)
@ VFLAG_EDGE_SEAM
@ VFLAG_EDGE_FREESTYLE
@ VFLAG_EDGE_ACTIVE
@ VFLAG_VERT_SELECTED_BEZT_HANDLE
@ VFLAG_EDGE_SHARP
@ VFLAG_EDGE_SELECTED
@ VFLAG_VERT_SELECTED
@ VFLAG_VERT_ACTIVE
@ VFLAG_VERT_GPENCIL_BEZT_HANDLE
struct GPUBatch * DRW_mesh_batch_cache_get_triangles_with_select_id(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_all_verts(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_verts(struct Mesh *me)
struct GPUVertBuf * DRW_mball_batch_cache_pos_vertbuf_get(struct Object *ob)
void DRW_particle_batch_cache_dirty_tag(struct ParticleSystem *psys, int mode)
struct GPUBatch * DRW_mesh_batch_cache_get_edges_with_select_id(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_edges(struct Mesh *me)
struct GPUBatch * DRW_particles_batch_cache_get_edit_inner_points(struct Object *object, struct ParticleSystem *psys, struct PTCacheEdit *edit)
void DRW_curve_batch_cache_validate(struct Curve *cu)
struct GPUBatch * DRW_mesh_batch_cache_get_surface_edges(struct Mesh *me)
void DRW_displist_indexbuf_create_triangles_in_order(struct ListBase *lb, struct GPUIndexBuf *ibo)
void DRW_hair_batch_cache_validate(struct Hair *hair)
void DRW_mball_batch_cache_dirty_tag(struct MetaBall *mb, int mode)
struct GPUBatch * DRW_mesh_batch_cache_get_sculpt_overlays(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_vnors(struct Mesh *me)
void DRW_mball_batch_cache_validate(struct MetaBall *mb)
struct GPUBatch * DRW_curve_batch_cache_get_normal_edge(struct Curve *cu)
struct GPUBatch ** DRW_mesh_batch_cache_get_surface_texpaint(struct Mesh *me)
void DRW_displist_indexbuf_create_lines_in_order(struct ListBase *lb, struct GPUIndexBuf *ibo)
struct GPUBatch * DRW_mesh_batch_cache_get_surface_texpaint_single(struct Mesh *me)
void DRW_mesh_batch_cache_validate(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_edges(struct Mesh *me)
void DRW_mesh_batch_cache_dirty_tag(struct Mesh *me, eMeshBatchDirtyMode mode)
struct GPUBatch * DRW_mesh_batch_cache_get_facedots_with_select_id(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_surface_vertpaint(struct Mesh *me)
int DRW_hair_material_count_get(struct Hair *hair)
void DRW_mball_batch_cache_free(struct MetaBall *mb)
struct GPUVertBuf * DRW_curve_batch_cache_pos_vertbuf_get(struct Curve *cu)
int DRW_curve_material_count_get(struct Curve *cu)
struct GPUBatch * DRW_metaball_batch_cache_get_wireframes_face(struct Object *ob)
void DRW_volume_batch_cache_validate(struct Volume *volume)
int DRW_volume_material_count_get(struct Volume *volume)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_skin_roots(struct Mesh *me)
int DRW_pointcloud_material_count_get(struct PointCloud *pointcloud)
struct GPUBatch * DRW_curve_batch_cache_get_edit_verts(struct Curve *cu)
void DRW_pointcloud_batch_cache_dirty_tag(struct PointCloud *pointcloud, int mode)
void DRW_volume_batch_cache_dirty_tag(struct Volume *volume, int mode)
void DRW_pointcloud_batch_cache_free(struct PointCloud *pointcloud)
void DRW_mesh_batch_cache_free_old(struct Mesh *me, int ctime)
@ VFLAG_FACE_UV_ACTIVE
@ VFLAG_FACE_ACTIVE
@ VFLAG_VERT_UV_PINNED
@ VFLAG_FACE_UV_SELECT
@ VFLAG_FACE_SELECTED
@ VFLAG_VERT_UV_SELECT
@ VFLAG_FACE_FREESTYLE
@ VFLAG_EDGE_UV_SELECT
struct GPUBatch * DRW_mesh_batch_cache_get_edit_triangles(struct Mesh *me)
void DRW_mesh_batch_cache_free(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_facedots(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_uv_edges(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_faces_stretch_angle(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_lnors(struct Mesh *me)
struct GPUBatch * DRW_particles_batch_cache_get_dots(struct Object *object, struct ParticleSystem *psys)
struct GPUBatch * DRW_mesh_batch_cache_get_verts_with_select_id(struct Mesh *me)
struct GPUBatch * DRW_metaball_batch_cache_get_triangles_with_normals(struct Object *ob)
void DRW_displist_vertbuf_create_pos_and_nor(struct ListBase *lb, struct GPUVertBuf *vbo, const struct Scene *scene)
void DRW_curve_batch_cache_dirty_tag(struct Curve *cu, int mode)
struct GPUBatch * DRW_particles_batch_cache_get_hair(struct Object *object, struct ParticleSystem *psys, struct ModifierData *md)
int DRW_mesh_material_count_get(struct Mesh *me)
struct GPUBatch * DRW_metaball_batch_cache_get_edge_detection(struct Object *ob, bool *r_is_manifold)
struct GPUBatch ** DRW_curve_batch_cache_get_surface_shaded(struct Curve *cu, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
struct GPUBatch * DRW_curve_batch_cache_get_edge_detection(struct Curve *cu, bool *r_is_manifold)
struct GPUBatch * DRW_mesh_batch_cache_get_edit_mesh_analysis(struct Mesh *me)
struct GPUBatch * DRW_mesh_batch_cache_get_surface(struct Mesh *me)
struct GPUBatch * DRW_curve_batch_cache_get_wireframes_face(struct Curve *cu)
struct GPUBatch * DRW_mesh_batch_cache_get_edituv_faces_stretch_area(struct Mesh *me, float **tot_area, float **tot_uv_area)