-/*\r
-PrtView plugin for GtkRadiant\r
-Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com\r
-\r
-This library is free software; you can redistribute it and/or\r
-modify it under the terms of the GNU Lesser General Public\r
-License as published by the Free Software Foundation; either\r
-version 2.1 of the License, or (at your option) any later version.\r
-\r
-This library is distributed in the hope that it will be useful,\r
-but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
-Lesser General Public License for more details.\r
-\r
-You should have received a copy of the GNU Lesser General Public\r
-License along with this library; if not, write to the Free Software\r
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
-*/\r
-\r
-#ifndef _PORTALS_H_\r
-#define _PORTALS_H_\r
-\r
-class CBspPoint {\r
-public:\r
- float p[3];\r
-};\r
-\r
-class CBspPortal {\r
-public:\r
- CBspPortal();\r
- ~CBspPortal();\r
-\r
-protected:\r
-\r
-public:\r
- CBspPoint center;\r
- unsigned point_count;\r
- CBspPoint *point;\r
- CBspPoint *inner_point;\r
- float fp_color_random[4];\r
- float min[3];\r
- float max[3];\r
- float dist;\r
- qboolean hint;\r
-\r
- qboolean Build(char *def);\r
-};\r
-\r
-class CPortals {\r
-public:\r
-\r
- CPortals();\r
- ~CPortals();\r
-\r
-protected:\r
-\r
-\r
-public:\r
-\r
- void Load(); // use filename in fn\r
- void Purge();\r
-\r
- void FixColors();\r
-\r
- char fn[_MAX_PATH];\r
-\r
- int zbuffer;\r
- int polygons;\r
- int lines;\r
- qboolean show_3d;\r
- qboolean aa_3d;\r
- qboolean fog;\r
- COLORREF color_3d;\r
- float width_3d; // in 8'ths\r
- float fp_color_3d[4];\r
- COLORREF color_fog;\r
- float fp_color_fog[4];\r
- float trans_3d;\r
- float clip_range;\r
- qboolean clip;\r
-\r
- qboolean show_2d;\r
- qboolean aa_2d;\r
- COLORREF color_2d;\r
- float width_2d; // in 8'ths\r
- float fp_color_2d[4];\r
-\r
- CBspPortal *portal;\r
- int *portal_sort;\r
- qboolean hint_flags;\r
-// CBspNode *node;\r
-\r
- unsigned int node_count;\r
- unsigned int portal_count;\r
-};\r
-\r
-class CPortalsRender : public IGL2DWindow, public IGL3DWindow {\r
-public:\r
-\r
- CPortalsRender();\r
- virtual ~CPortalsRender();\r
-\r
-protected:\r
-\r
- int refCount;\r
-#ifdef _WIN32\r
- CRITICAL_SECTION protect;\r
-#endif\r
-\r
-public:\r
-\r
- // IGL2DWindow IGL3DWindow interface\r
- void IncRef() { refCount++; }\r
- void DecRef() { refCount--; if (refCount <= 0) delete this; }\r
- void Draw2D( VIEWTYPE vt );\r
- void Draw3D();\r
- void Register();\r
-};\r
-\r
-// void Sys_Printf (char *text, ...);\r
-\r
-extern CPortals portals;\r
-extern CPortalsRender render;\r
-\r
-#endif // _PORTALS_H_\r
+/*
+ PrtView plugin for GtkRadiant
+ Copyright (C) 2001 Geoffrey Dewan, Loki software and qeradiant.com
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef _PORTALS_H_
+#define _PORTALS_H_
+
+#include <glib.h>
+#include "irender.h"
+#include "renderable.h"
+#include "math/vector.h"
+
+
+class CBspPoint {
+public:
+float p[3];
+};
+
+class CBspPortal {
+public:
+CBspPortal();
+~CBspPortal();
+
+protected:
+
+public:
+CBspPoint center;
+unsigned point_count;
+CBspPoint *point;
+CBspPoint *inner_point;
+float fp_color_random[4];
+float min[3];
+float max[3];
+float dist;
+bool hint;
+
+bool Build( char *def );
+};
+
+#ifdef PATH_MAX
+#define PRTVIEW_PATH_MAX PATH_MAX
+#else
+#define PRTVIEW_PATH_MAX 260
+#endif
+typedef guint32 PackedColour;
+#define RGB( r, g, b ) ( (guint32)( ( (guint8) ( r ) | ( (guint16) ( g ) << 8 ) ) | ( ( (guint32) (guint8) ( b ) ) << 16 ) ) )
+#define GetRValue( rgb ) ( (guint8)( rgb ) )
+#define GetGValue( rgb ) ( (guint8)( ( (guint16)( rgb ) ) >> 8 ) )
+#define GetBValue( rgb ) ( (guint8)( ( rgb ) >> 16 ) )
+
+
+class CPortals {
+public:
+
+CPortals();
+~CPortals();
+
+protected:
+
+
+public:
+
+void Load(); // use filename in fn
+void Purge();
+
+void FixColors();
+
+char fn[PRTVIEW_PATH_MAX];
+
+int zbuffer;
+int polygons;
+int lines;
+bool show_3d;
+bool aa_3d;
+bool fog;
+PackedColour color_3d;
+float width_3d; // in 8'ths
+float fp_color_3d[4];
+PackedColour color_fog;
+float fp_color_fog[4];
+float trans_3d;
+float clip_range;
+bool clip;
+
+bool show_2d;
+bool aa_2d;
+PackedColour color_2d;
+float width_2d; // in 8'ths
+float fp_color_2d[4];
+
+CBspPortal *portal;
+int *portal_sort;
+bool hint_flags;
+// CBspNode *node;
+
+unsigned int node_count;
+unsigned int portal_count;
+};
+
+class CubicClipVolume
+{
+public:
+Vector3 cam, min, max;
+};
+
+class CPortalsDrawSolid : public OpenGLRenderable
+{
+public:
+mutable CubicClipVolume clip;
+void render( RenderStateFlags state ) const;
+};
+
+class CPortalsDrawSolidOutline : public OpenGLRenderable
+{
+public:
+mutable CubicClipVolume clip;
+void render( RenderStateFlags state ) const;
+};
+
+class CPortalsDrawWireframe : public OpenGLRenderable
+{
+public:
+void render( RenderStateFlags state ) const;
+};
+
+class CPortalsRender : public Renderable
+{
+public:
+CPortalsDrawSolid m_drawSolid;
+CPortalsDrawSolidOutline m_drawSolidOutline;
+CPortalsDrawWireframe m_drawWireframe;
+
+void renderSolid( Renderer& renderer, const VolumeTest& volume ) const;
+void renderWireframe( Renderer& renderer, const VolumeTest& volume ) const;
+};
+
+extern CPortals portals;
+extern CPortalsRender render;
+
+void Portals_constructShaders();
+void Portals_destroyShaders();
+
+void Portals_shadersChanged();
+
+
+#endif // _PORTALS_H_