doxygen: prevent GPL license block from being parsed as doxygen comment.
[blender.git] / source / blender / render / intern / include / rayintersection.h
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2007 Blender Foundation.
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): AndrĂ© Pinto.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  * RE_raytrace.h: ray tracing api, can be used independently from the renderer. 
29  */
30
31 #ifndef __RENDER_RAYINTERSECTION_H__
32 #define __RENDER_RAYINTERSECTION_H__
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 struct RayObject;
39
40 /* Ray Hints */
41
42 #define RE_RAY_LCTS_MAX_SIZE    256
43 #define RT_USE_LAST_HIT                 /* last shadow hit is reused before raycasting on whole tree */
44 //#define RT_USE_HINT                   /* last hit object is reused before raycasting on whole tree */
45
46 typedef struct LCTSHint {
47         int size;
48         struct RayObject *stack[RE_RAY_LCTS_MAX_SIZE];
49 } LCTSHint;
50
51 typedef struct RayHint {
52         union { LCTSHint lcts; } data;
53 } RayHint;
54
55 /* Ray Intersection */
56
57 typedef struct Isect {
58         /* ray start, direction (normalized vector), and max distance. on hit,
59            the distance is modified to be the distance to the hit point. */
60         float start[3];
61         float dir[3];
62         float dist;
63
64         /* precomputed values to accelerate bounding box intersection */
65         int bv_index[6];
66         float idot_axis[3];
67
68         /* intersection options */
69         int mode;                               /* RE_RAY_SHADOW, RE_RAY_MIRROR, RE_RAY_SHADOW_TRA */
70         int lay;                                /* -1 default, set for layer lamps */
71         int skip;                               /* skip flags */
72         int check;                              /* check flags */
73         void *userdata;                 /* used by bake check */
74
75         /* hit information */
76         float u, v;
77         int isect;                              /* which half of quad */
78         
79         struct {
80                 void *ob;
81                 void *face;
82         } hit, orig;
83         
84         /* last hit optimization */
85         struct RayObject *last_hit;
86
87         /* hints */
88 #ifdef RT_USE_HINT
89         RayTraceHint *hint, *hit_hint;
90 #endif
91         RayHint *hint;
92         
93         /* ray counter */
94 #ifdef RE_RAYCOUNTER
95         RayCounter *raycounter;
96 #endif
97 } Isect;
98
99 /* ray types */
100 #define RE_RAY_SHADOW 0
101 #define RE_RAY_MIRROR 1
102 #define RE_RAY_SHADOW_TRA 2
103
104 /* skip options */
105 #define RE_SKIP_CULLFACE                (1 << 0)
106 /* if using this flag then *face should be a pointer to a VlakRen */
107 #define RE_SKIP_VLR_NEIGHBOUR           (1 << 1)
108
109 /* check options */
110 #define RE_CHECK_VLR_NONE               0
111 #define RE_CHECK_VLR_RENDER             1
112 #define RE_CHECK_VLR_NON_SOLID_MATERIAL 2
113 #define RE_CHECK_VLR_BAKE               3
114
115 /* arbitrary, but can't use e.g. FLT_MAX because of precision issues */
116 #define RE_RAYTRACE_MAXDIST     1e15f
117 #define RE_RAYTRACE_EPSILON 0.0f
118
119 #ifdef __cplusplus
120 }
121 #endif
122
123 #endif /* __RENDER_RAYINTERSECTION_H__ */
124