Cleanup: blank lines over doxy headers
[blender.git] / source / blender / draw / intern / draw_hair_private.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
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  * The Original Code is Copyright (C) 2017 by Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file draw_hair_private.h
27  *  \ingroup draw
28  */
29
30 #ifndef __DRAW_HAIR_PRIVATE_H__
31 #define __DRAW_HAIR_PRIVATE_H__
32
33 #define MAX_LAYER_NAME_CT   3 /* u0123456789, u, a0123456789 */
34 #define MAX_LAYER_NAME_LEN  DECIMAL_DIGITS_BOUND(uint) + 2
35 #define MAX_THICKRES        2 /* see eHairType */
36 #define MAX_HAIR_SUBDIV     4 /* see hair_subdiv rna */
37
38 struct Object;
39 struct ParticleSystem;
40 struct ModifierData;
41 struct ParticleHairCache;
42
43 typedef struct ParticleHairFinalCache {
44         /* Output of the subdivision stage: vertex buff sized to subdiv level. */
45         GPUVertBuf *proc_buf;
46         GPUTexture *proc_tex;
47
48          /* Just contains a huge index buffer used to draw the final hair. */
49         GPUBatch *proc_hairs[MAX_THICKRES];
50
51         int strands_res; /* points per hair, at least 2 */
52 } ParticleHairFinalCache;
53
54 typedef struct ParticleHairCache {
55         GPUVertBuf *pos;
56         GPUIndexBuf *indices;
57         GPUBatch *hairs;
58
59         /* Hair Procedural display: Interpolation is done on the GPU. */
60         GPUVertBuf *proc_point_buf; /* Input control points */
61         GPUTexture *point_tex;
62
63         GPUVertBuf *proc_strand_buf; /* Infos of control points strands (segment count and base index) */
64         GPUTexture *strand_tex;
65
66         GPUVertBuf *proc_uv_buf[MAX_MTFACE];
67         GPUTexture *uv_tex[MAX_MTFACE];
68         char uv_layer_names[MAX_MTFACE][MAX_LAYER_NAME_CT][MAX_LAYER_NAME_LEN];
69
70         GPUVertBuf *proc_col_buf[MAX_MCOL];
71         GPUTexture *col_tex[MAX_MCOL];
72         char col_layer_names[MAX_MCOL][MAX_LAYER_NAME_CT][MAX_LAYER_NAME_LEN];
73
74         int num_uv_layers;
75         int num_col_layers;
76
77         ParticleHairFinalCache final[MAX_HAIR_SUBDIV];
78
79         int strands_len;
80         int elems_len;
81         int point_len;
82 } ParticleHairCache;
83
84 bool particles_ensure_procedural_data(
85         struct Object *object,
86         struct ParticleSystem *psys,
87         struct ModifierData *md,
88         struct ParticleHairCache **r_hair_cache,
89         int subdiv,
90         int thickness_res);
91
92 #endif /* __DRAW_HAIR_PRIVATE_H__ */