Reverted incorrect merge (missing files)
[blender.git] / source / blender / radiosity / extern / include / radio_types.h
1 /*
2  * radio_types.h
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Contributor(s): none yet.
28  *
29  * ***** END GPL LICENSE BLOCK *****
30  */
31
32 /*  #include "misc_util.h" */ /* for listbase...*/
33
34
35 #ifndef RADIO_TYPES_H
36 #define RADIO_TYPES_H
37
38 #include "DNA_listBase.h" 
39 #include "DNA_material_types.h" 
40
41 struct Render;
42 struct CustomData;
43
44 #define PI  M_PI
45 #define RAD_MAXFACETAB  1024
46 #define RAD_NEXTFACE(a) if( ((a) & 1023)==0 ) face= RG.facebase[(a)>>10]; else face++;
47
48 /* RG.phase */
49 #define RAD_SHOOTE      1
50 #define RAD_SHOOTP      2
51 #define RAD_SOLVE       3
52
53 typedef struct RadView {
54         float cam[3], tar[3], up[3];
55         float wx1, wx2, wy1, wy2;
56         float mynear, myfar;
57         float viewmat[4][4], winmat[4][4];
58         unsigned int *rect, *rectz;
59         short rectx, recty;
60         int wid;
61
62 } RadView;
63
64 /* rn->f */
65 #define RAD_PATCH               1
66 #define RAD_SHOOT               2
67 #define RAD_SUBDIV              4
68 #define RAD_BACKFACE    8
69 #define RAD_TWOSIDED    16
70
71
72 typedef struct RNode {                                  /* length: 104 */
73         struct RNode *down1, *down2, *up;
74         struct RNode *ed1, *ed2, *ed3, *ed4;
75         struct RPatch *par;
76
77         char lev1, lev2, lev3, lev4;            /* edgelevels */
78         short type;                                                     /* type: 4==QUAD, 3==TRIA */
79         short f;                                                        
80         float *v1, *v2, *v3, *v4;
81         float totrad[3], area;
82         
83         unsigned int col;
84         int orig;                                                       /* index in custom face data */
85 } RNode;
86
87
88 typedef struct Face {                                   /* length: 52 */
89         float *v1, *v2, *v3, *v4;
90         unsigned int col, matindex;
91         int orig;                                                       /* index in custom face data */
92 } Face;
93
94 /* rp->f1 */
95 #define RAD_NO_SPLIT    1
96
97 typedef struct RPatch {
98         struct RPatch *next, *prev;
99         RNode *first;                   /* first node==patch */
100
101         struct Object *from;
102         
103         int type;                               /* 3: TRIA, 4: QUAD */
104         short f, f1;                    /* flags f: if node, only for subdiv */
105
106         float ref[3], emit[3], unshot[3];
107         float cent[3], norm[3];
108         float area;
109         int matindex;
110         
111 } RPatch;
112
113
114 typedef struct VeNoCo {                         /* needed for splitconnected */
115         struct VeNoCo *next;
116         float *v;
117         float *n;
118         float *col;
119         int flag;
120 } VeNoCo;
121
122
123 typedef struct EdSort {                                 /* sort edges */
124         float *v1, *v2;
125         RNode *node;
126         int nr;
127 } EdSort;
128
129 typedef struct {
130         struct Radio *radio;
131         unsigned int *hemibuf;
132         struct ListBase patchbase;
133         int totpatch, totelem, totvert, totlamp;
134         RNode **elem;                                           /* global array with all pointers */
135         VeNoCo *verts;                                          /* temporal vertices from patches */
136         float *formfactors;                                 /* 1 factor per element */
137         float *topfactors, *sidefactors;    /* LUT for delta's */
138         int *index;                                             /* LUT for above LUT */
139         Face **facebase;
140         int totface;
141         float min[3], max[3], size[3], cent[3]; /* world */
142         float maxsize, totenergy;
143         float patchmin, patchmax;
144         float elemmin, elemmax;
145         float radfactor, lostenergy, igamma;            /* radfac is in button, radfactor is calculated */
146         int phase;
147         struct Render *re;                                                      /* for calling hemizbuf correctly */
148         /* to preserve materials as used before, max 16 */
149         Material *matar[MAXMAT];
150         int totmat;
151
152         /* for preserving face data */
153         int mfdatatot;
154         struct CustomData *mfdata;
155         struct RNode **mfdatanodes;
156         
157                 /* this part is a copy of struct Radio */
158         short hemires, maxiter;
159         short drawtype, flag;                   /* bit 0 en 1: show limits */
160         short subshootp, subshoote, nodelim, maxsublamp;
161         int maxnode;
162         float convergence;
163         float radfac, gamma;            /* for display */
164
165 } RadGlobal;
166
167 #endif /* radio_types.h */
168