5e61fe99e10ac65ad887aff8e7fcf0adf9c6aa36
[xonotic/netradiant.git] / contrib / prtview / portals.h
1 /*
2 PrtView plugin for GtkRadiant
3 Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19
20 #ifndef _PORTALS_H_
21 #define _PORTALS_H_
22
23 #include <glib.h>
24 #include "irender.h"
25 #include "renderable.h"
26 #include "math/vector.h"
27
28
29 class CBspPoint {
30 public:
31         float p[3];
32 };
33
34 class CBspPortal {
35 public:
36         CBspPortal();
37         ~CBspPortal();
38
39 protected:
40
41 public:
42         CBspPoint center;
43         unsigned point_count;
44         CBspPoint *point;
45         CBspPoint *inner_point;
46         float fp_color_random[4];
47         float min[3];
48         float max[3];
49         float dist;
50         bool hint;
51
52         bool Build(char *def);
53 };
54
55 #define PATH_MAX 260
56 typedef guint32 PackedColour;
57 #define RGB(r, g, b) ((guint32)(((guint8) (r) | ((guint16) (g) << 8))|(((guint32) (guint8) (b)) << 16)))
58 #define GetRValue(rgb)      ((guint8)(rgb))
59 #define GetGValue(rgb)      ((guint8)(((guint16)(rgb)) >> 8))
60 #define GetBValue(rgb)      ((guint8)((rgb)>>16))
61
62
63 class CPortals {
64 public:
65
66   CPortals();
67   ~CPortals();
68
69 protected:
70
71
72 public:
73
74         void Load(); // use filename in fn
75         void Purge();
76
77         void FixColors();
78
79         char fn[PATH_MAX];
80
81         int zbuffer;
82         int polygons;
83         int lines;
84         bool show_3d;
85         bool aa_3d;
86         bool fog;
87         PackedColour color_3d;
88         float width_3d;  // in 8'ths
89         float fp_color_3d[4];
90         PackedColour color_fog;
91         float fp_color_fog[4];
92         float trans_3d;
93         float clip_range;
94         bool clip;
95
96         bool show_2d;
97         bool aa_2d;
98         PackedColour color_2d;
99         float width_2d;  // in 8'ths
100         float fp_color_2d[4];
101
102         CBspPortal *portal;
103         int *portal_sort;
104         bool hint_flags;
105 //      CBspNode *node;
106
107         unsigned int node_count;
108         unsigned int portal_count;
109 };
110
111 class CubicClipVolume
112 {
113 public:
114   Vector3 cam, min, max;
115 };
116
117 class CPortalsDrawSolid : public OpenGLRenderable
118 {
119 public:
120   mutable CubicClipVolume clip;
121   void render(RenderStateFlags state) const;
122 };
123
124 class CPortalsDrawSolidOutline : public OpenGLRenderable
125 {
126 public:
127   mutable CubicClipVolume clip;
128   void render(RenderStateFlags state) const;
129 };
130
131 class CPortalsDrawWireframe : public OpenGLRenderable
132 {
133 public:
134   void render(RenderStateFlags state) const;
135 };
136
137 class CPortalsRender : public Renderable
138 {
139 public:
140   CPortalsDrawSolid m_drawSolid;
141   CPortalsDrawSolidOutline m_drawSolidOutline;
142   CPortalsDrawWireframe m_drawWireframe;
143
144   void renderSolid(Renderer& renderer, const VolumeTest& volume) const;
145   void renderWireframe(Renderer& renderer, const VolumeTest& volume) const;
146 };
147
148 extern CPortals portals;
149 extern CPortalsRender render;
150
151 void Portals_constructShaders();
152 void Portals_destroyShaders();
153
154 void Portals_shadersChanged();
155
156
157 #endif // _PORTALS_H_