]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - contrib/bobtoolz/DVisDrawer.cpp
transfer from internal tree r5311 branches/1.4-gpl
[xonotic/netradiant.git] / contrib / bobtoolz / DVisDrawer.cpp
1 /*\r
2 BobToolz plugin for GtkRadiant\r
3 Copyright (C) 2001 Gordon Biggans\r
4 \r
5 This library is free software; you can redistribute it and/or\r
6 modify it under the terms of the GNU Lesser General Public\r
7 License as published by the Free Software Foundation; either\r
8 version 2.1 of the License, or (at your option) any later version.\r
9 \r
10 This library is distributed in the hope that it will be useful,\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
13 Lesser General Public License for more details.\r
14 \r
15 You should have received a copy of the GNU Lesser General Public\r
16 License along with this library; if not, write to the Free Software\r
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
18 */\r
19 \r
20 // BobView.cpp: implementation of the DVisDrawer class.\r
21 //\r
22 //////////////////////////////////////////////////////////////////////\r
23 \r
24 #include "StdAfx.h"\r
25 #include "DPoint.h"\r
26 #include "DVisDrawer.h"\r
27 #include "misc.h"\r
28 #include "funchandlers.h"\r
29 \r
30 //////////////////////////////////////////////////////////////////////\r
31 // Construction/Destruction\r
32 //////////////////////////////////////////////////////////////////////\r
33 \r
34 DVisDrawer::DVisDrawer()\r
35 {\r
36         refCount = 1;\r
37         m_bHooked = FALSE;\r
38         m_list = NULL;\r
39 }\r
40 \r
41 DVisDrawer::~DVisDrawer()\r
42 {\r
43         if(m_bHooked)\r
44                 UnRegister();\r
45 \r
46         g_VisView = NULL;\r
47 }\r
48 \r
49 //////////////////////////////////////////////////////////////////////\r
50 // Implementation\r
51 //////////////////////////////////////////////////////////////////////\r
52 \r
53 void DVisDrawer::Draw2D(VIEWTYPE vt)\r
54 {\r
55         if(!m_list)\r
56                 return;\r
57 \r
58         g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS);\r
59 \r
60         g_QglTable.m_pfn_qglDisable(GL_BLEND);\r
61         g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH);\r
62 \r
63         g_QglTable.m_pfn_qglPushMatrix();\r
64         \r
65         switch(vt)\r
66         {\r
67         case XY:\r
68                 break;\r
69         case XZ:\r
70                 g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f);\r
71                 break;\r
72         case YZ:\r
73                 g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f);\r
74                 g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f);\r
75                 break;\r
76         }\r
77 \r
78         g_QglTable.m_pfn_qglLineWidth(1.0f);\r
79         g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 0.5f);\r
80 \r
81         g_QglTable.m_pfn_qglEnable(GL_BLEND);\r
82         g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
83         g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH);\r
84 \r
85         g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS);\r
86 \r
87         //bleh\r
88         list<DWinding *>::const_iterator l=m_list->begin();\r
89 \r
90         for(; l != m_list->end(); l++)\r
91         {\r
92                 DWinding* w = *l;\r
93 \r
94                 g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f);\r
95 \r
96                 g_QglTable.m_pfn_qglBegin(GL_POLYGON);\r
97                 for(int i = 0; i < w->numpoints; i++) {\r
98                         g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]);\r
99                 }\r
100                 g_QglTable.m_pfn_qglEnd();\r
101         }\r
102 \r
103         \r
104         g_QglTable.m_pfn_qglPopMatrix();\r
105 \r
106         g_QglTable.m_pfn_qglPopAttrib();\r
107 }\r
108 \r
109 void DVisDrawer::Draw3D()\r
110 {\r
111         if(!m_list)\r
112                 return;\r
113 \r
114         g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS);\r
115 \r
116         g_QglTable.m_pfn_qglColor4f(1.0, 0.0, 0.0, 0.5f);\r
117 \r
118 //      g_QglTable.m_pfn_qglHint(GL_FOG_HINT, GL_NICEST);\r
119         \r
120 //      g_QglTable.m_pfn_qglDisable(GL_CULL_FACE);\r
121         g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH);\r
122 \r
123 //      g_QglTable.m_pfn_qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
124 //      g_QglTable.m_pfn_qglShadeModel(GL_SMOOTH);\r
125 \r
126         g_QglTable.m_pfn_qglEnable(GL_BLEND);\r
127         g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r
128         g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH);\r
129 \r
130         g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS);\r
131 \r
132         //bleh\r
133         list<DWinding *>::const_iterator l=m_list->begin();\r
134 \r
135         for(; l != m_list->end(); l++)\r
136         {\r
137                 DWinding* w = *l;\r
138 \r
139                 g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f);\r
140 \r
141                 g_QglTable.m_pfn_qglBegin(GL_POLYGON);\r
142                 for(int i = 0; i < w->numpoints; i++) {\r
143                         g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]);\r
144                 }\r
145                 g_QglTable.m_pfn_qglEnd();\r
146         }\r
147 \r
148         g_QglTable.m_pfn_qglPopAttrib();\r
149 }\r
150 \r
151 void DVisDrawer::Register()\r
152 {\r
153         g_QglTable.m_pfnHookGL2DWindow( this );\r
154         g_QglTable.m_pfnHookGL3DWindow( this );\r
155         m_bHooked = TRUE;\r
156 }\r
157 \r
158 void DVisDrawer::UnRegister()\r
159 {\r
160         g_QglTable.m_pfnUnHookGL2DWindow( this );\r
161         g_QglTable.m_pfnUnHookGL3DWindow( this );\r
162         m_bHooked = FALSE;\r
163 }\r
164 \r
165 void DVisDrawer::SetList(std::list<DWinding*> *pointList)\r
166 {\r
167         if(m_list)\r
168                 ClearPoints();\r
169 \r
170         m_list = pointList;\r
171 }\r
172 \r
173 void DVisDrawer::ClearPoints()\r
174 {\r
175   list<DWinding *>::const_iterator deadPoint=m_list->begin();\r
176         for(; deadPoint!=m_list->end(); deadPoint++)\r
177                 delete *deadPoint;\r
178         m_list->clear();\r
179 }\r