***map loader generates portals for the map*** (can you tell this is a big deal? :)
[xonotic/darkplaces.git] / gl_rmisc.c
1 /*
2 Copyright (C) 1996-1997 Id Software, Inc.
3
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
12
13 See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18
19 */
20 // r_misc.c
21
22 #include "quakedef.h"
23
24
25 /*
26 ===============
27 R_Envmap_f
28
29 Grab six views for environment mapping tests
30 ===============
31 */
32 void R_Envmap_f (void)
33 {
34         byte    buffer[256*256*4];
35
36         if (!r_render.value)
37                 return;
38
39         glDrawBuffer  (GL_FRONT);
40         glReadBuffer  (GL_FRONT);
41         envmap = true;
42
43         r_refdef.vrect.x = 0;
44         r_refdef.vrect.y = 0;
45         r_refdef.vrect.width = 256;
46         r_refdef.vrect.height = 256;
47
48         r_refdef.viewangles[0] = 0;
49         r_refdef.viewangles[1] = 0;
50         r_refdef.viewangles[2] = 0;
51         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
52         R_RenderView ();
53         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
54         COM_WriteFile ("env0.rgb", buffer, sizeof(buffer));             
55
56         r_refdef.viewangles[1] = 90;
57         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
58         R_RenderView ();
59         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
60         COM_WriteFile ("env1.rgb", buffer, sizeof(buffer));             
61
62         r_refdef.viewangles[1] = 180;
63         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
64         R_RenderView ();
65         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
66         COM_WriteFile ("env2.rgb", buffer, sizeof(buffer));             
67
68         r_refdef.viewangles[1] = 270;
69         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
70         R_RenderView ();
71         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
72         COM_WriteFile ("env3.rgb", buffer, sizeof(buffer));             
73
74         r_refdef.viewangles[0] = -90;
75         r_refdef.viewangles[1] = 0;
76         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
77         R_RenderView ();
78         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
79         COM_WriteFile ("env4.rgb", buffer, sizeof(buffer));             
80
81         r_refdef.viewangles[0] = 90;
82         r_refdef.viewangles[1] = 0;
83         GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
84         R_RenderView ();
85         glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
86         COM_WriteFile ("env5.rgb", buffer, sizeof(buffer));             
87
88         envmap = false;
89         glDrawBuffer  (GL_BACK);
90         glReadBuffer  (GL_BACK);
91         GL_EndRendering ();
92 }
93
94 void R_InitParticles (void);
95
96 void gl_misc_start()
97 {
98 }
99
100 void gl_misc_shutdown()
101 {
102 }
103
104 void gl_misc_newmap()
105 {
106 }
107
108 /*
109 ===============
110 R_Init
111 ===============
112 */
113 void GL_Misc_Init (void)
114 {       
115         Cmd_AddCommand ("envmap", R_Envmap_f);  
116         Cmd_AddCommand ("timerefresh", R_TimeRefresh_f);        
117
118         R_RegisterModule("GL_Misc", gl_misc_start, gl_misc_shutdown, gl_misc_newmap);
119 }
120
121 void R_ClearParticles (void);
122 void GL_BuildLightmaps (void);
123
124 /*
125 ===============
126 R_NewMap
127 ===============
128 */
129 void SHOWLMP_clear();
130 void R_NewMap (void)
131 {
132         int             i;
133         
134         for (i=0 ; i<256 ; i++)
135                 d_lightstylevalue[i] = 264;             // normal light value
136
137         memset (&r_worldentity, 0, sizeof(r_worldentity));
138         r_worldentity.render.model = cl.worldmodel;
139         currententity = &r_worldentity;
140
141 // clear out efrags in case the level hasn't been reloaded
142 // FIXME: is this one short?
143 //      for (i=0 ; i<cl.worldmodel->numleafs ; i++)
144 //              cl.worldmodel->leafs[i].efrags = NULL;
145                         
146         r_viewleaf = NULL;
147         R_Modules_NewMap();
148
149         GL_BuildLightmaps ();
150
151         // identify sky texture
152         skytexturenum = -1;
153         for (i=0 ; i<cl.worldmodel->numtextures ; i++)
154         {
155                 if (!cl.worldmodel->textures[i])
156                         continue;
157                 if (!strncmp(cl.worldmodel->textures[i]->name,"sky",3) )
158                         skytexturenum = i;
159         }
160         SHOWLMP_clear();
161 }
162
163
164 /*
165 ====================
166 R_TimeRefresh_f
167
168 For program optimization
169 ====================
170 */
171 qboolean intimerefresh = 0;
172 void R_TimeRefresh_f (void)
173 {
174         int                     i;
175         float           start, stop, time;
176
177         intimerefresh = 1;
178         start = Sys_FloatTime ();
179         for (i = 0;i < 128;i++)
180         {
181                 r_refdef.viewangles[0] = 0;
182                 r_refdef.viewangles[1] = i/128.0*360.0;
183                 r_refdef.viewangles[2] = 0;
184                 SCR_UpdateScreen();
185         }
186
187         stop = Sys_FloatTime ();
188         intimerefresh = 0;
189         time = stop-start;
190         Con_Printf ("%f seconds (%f fps)\n", time, 128/time);
191 }
192
193