- replaced G.{edve,eded,edvl} with G.editMesh, atm just a structure to
[blender.git] / source / blender / blenkernel / BKE_displist.h
1 /* display list (or rather multi purpose list) stuff */
2 /* 
3         $Id$
4  *
5  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version. The Blender
11  * Foundation also sells licenses for use in proprietary software under
12  * the Blender License.  See http://www.blender.org/BL/ for information
13  * about this.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  *
24  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
25  * All rights reserved.
26  *
27  * The Original Code is: all of this file.
28  *
29  * Contributor(s): none yet.
30  *
31  * ***** END GPL/BL DUAL LICENSE BLOCK *****
32
33 */
34
35 #ifndef BKE_DISPLIST_H
36 #define BKE_DISPLIST_H
37
38 #define DL_POLY                 0
39 #define DL_SEGM                 1
40 #define DL_SURF                 2
41 #define DL_TRIA                 3
42 #define DL_INDEX3               4
43 #define DL_INDEX4               5
44 #define DL_VERTCOL              6
45 #define DL_VERTS                7
46 #define DL_NORS                 8
47 #define DL_MESH                                 9
48
49 /* EVIL: #define DL_SURFINDEX(cyclu, cyclv, sizeu, sizev) */
50
51 /* prototypes */
52
53 struct Object;
54 struct Curve;
55 struct ListBase;
56 struct Material;
57 struct Bone;
58 struct Mesh;
59 struct TFace;
60 struct EditMesh;
61
62 typedef struct DispListMesh DispListMesh;
63 struct DispListMesh {
64         int totvert, totface;
65         struct MVert *mvert;
66         struct MCol *mcol;
67         struct MFace *mface;
68         struct TFace *tface;
69         int flag;
70 };
71
72 void displistmesh_free(DispListMesh *dlm);
73 void displistmesh_calc_vert_normals(DispListMesh *dlm);
74
75 void displistmesh_to_mesh(DispListMesh *dlm, struct Mesh *me);
76
77 DispListMesh *displistmesh_from_editmesh(struct EditMesh *em);
78 DispListMesh *displistmesh_from_mesh(struct Mesh *mesh, float *extverts);
79
80 /*
81  * All the different DispList.type's use the
82  * data in the displist structure in fairly
83  * different ways which can be rather confusing, 
84  * the best thing to do would be to make a structure
85  * for each displaylist type that has the fields
86  * needed w/ proper names, and then make the actual
87  * DispList structure a typed union.
88  *   - zr
89  */
90
91 /* needs splitting! */
92 typedef struct DispList {
93     struct DispList *next, *prev;
94     short type, flag;
95     int parts, nr;
96     short col, rt;              /* rt wordt gebruikt door initrenderNurbs */
97         float *verts, *nors;
98         int *index;
99         unsigned int *col1, *col2;
100         struct DispListMesh *mesh;
101         
102         /* Begin NASTY_NLA_STUFF */
103 //      int *offset, *run;      /* Used to index into the bone & weight lists */
104 //      struct Bone *bones;
105 //      float *weights;
106         /* End NASTY_NLA_STUFF */
107 } DispList;
108
109 extern void copy_displist(struct ListBase *lbn, struct ListBase *lb);
110 extern void free_disp_elem(DispList *dl);
111 extern void free_displist_by_type(struct ListBase *lb, int type);
112 extern DispList *find_displist_create(struct ListBase *lb, int type);
113 extern DispList *find_displist(struct ListBase *lb, int type);
114 extern void addnormalsDispList(struct Object *ob, struct ListBase *lb);
115 extern void count_displist(struct ListBase *lb, int *totvert, int *totface);
116 extern void curve_to_filledpoly(struct Curve *cu, struct ListBase *dispbase);
117 extern void freedisplist(struct ListBase *lb);
118 extern void makeDispList(struct Object *ob);
119 extern void set_displist_onlyzero(int val);
120 extern void shadeDispList(struct Object *ob);
121 void freefastshade(void);
122 void boundbox_displist(struct Object *ob);
123 void imagestodisplist(void);
124 void reshadeall_displist(void);
125 void test_all_displists(void);
126
127 #endif
128