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