DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
r_sky.c File Reference
#include "quakedef.h"
#include "image.h"
+ Include dependency graph for r_sky.c:

Go to the source code of this file.

Data Structures

struct  suffixinfo_t
 

Macros

#define skygridx   32
 
#define skygridx1   (skygridx + 1)
 
#define skygridxrecip   (1.0f / (skygridx))
 
#define skygridy   32
 
#define skygridy1   (skygridy + 1)
 
#define skygridyrecip   (1.0f / (skygridy))
 
#define skysphere_numtriangles   (skygridx * skygridy * 2)
 
#define skysphere_numverts   (skygridx1 * skygridy1)
 

Functions

static void LoadSky_f (cmd_state_t *cmd)
 
static int R_LoadSkyBox (void)
 
void R_ResetSkyBox (void)
 
int R_SetSkyBox (const char *sky)
 
void R_Sky (void)
 
void R_Sky_Init (void)
 
static void r_sky_newmap (void)
 
static void r_sky_shutdown (void)
 
static void r_sky_start (void)
 
static void R_SkyBox (void)
 
static void R_SkySphere (void)
 
void R_SkyStartFrame (void)
 
static void R_UnloadSkyBox (void)
 
static void skyspherecalc (void)
 

Variables

cvar_t r_sky = {CF_CLIENT | CF_ARCHIVE, "r_sky", "1", "enables sky rendering (black otherwise)"}
 
cvar_t r_sky_scissor = {CF_CLIENT, "r_sky_scissor", "1", "limit rendering of sky to approximately the area of the sky surfaces"}
 
cvar_t r_skyscroll1 = {CF_CLIENT | CF_ARCHIVE, "r_skyscroll1", "1", "speed at which upper clouds layer scrolls in quake sky"}
 
cvar_t r_skyscroll2 = {CF_CLIENT | CF_ARCHIVE, "r_skyscroll2", "2", "speed at which lower clouds layer scrolls in quake sky"}
 
static const int skyboxelement3i [6 *2 *3]
 
static const unsigned short skyboxelement3s [6 *2 *3]
 
static skinframe_tskyboxskinframe [6]
 
static const float skyboxtexcoord2f [6 *4 *2]
 
static const float skyboxvertex3f [6 *4 *3]
 
static matrix4x4_t skyinversematrix
 
static matrix4x4_t skymatrix
 
static char skyname [MAX_QPATH]
 
static int skyrenderbox
 
int skyrenderlater
 
int skyrendermasked
 
static int skyrendersphere
 
int skyscissor [4]
 
static int skysphere_element3i [skysphere_numtriangles *3]
 
static unsigned short skysphere_element3s [skysphere_numtriangles *3]
 
static float skysphere_texcoord2f [skysphere_numverts *2]
 
static float skysphere_vertex3f [skysphere_numverts *3]
 
static rtexturepool_tskytexturepool
 
static const suffixinfo_t suffix [3][6]
 

Macro Definition Documentation

◆ skygridx

#define skygridx   32

Definition at line 314 of file r_sky.c.

Referenced by skyspherecalc().

◆ skygridx1

#define skygridx1   (skygridx + 1)

Definition at line 315 of file r_sky.c.

Referenced by skyspherecalc().

◆ skygridxrecip

#define skygridxrecip   (1.0f / (skygridx))

Definition at line 316 of file r_sky.c.

Referenced by skyspherecalc().

◆ skygridy

#define skygridy   32

Definition at line 317 of file r_sky.c.

Referenced by skyspherecalc().

◆ skygridy1

#define skygridy1   (skygridy + 1)

Definition at line 318 of file r_sky.c.

◆ skygridyrecip

#define skygridyrecip   (1.0f / (skygridy))

Definition at line 319 of file r_sky.c.

Referenced by skyspherecalc().

◆ skysphere_numtriangles

#define skysphere_numtriangles   (skygridx * skygridy * 2)

Definition at line 321 of file r_sky.c.

Referenced by R_SkySphere(), and skyspherecalc().

◆ skysphere_numverts

#define skysphere_numverts   (skygridx1 * skygridy1)

Definition at line 320 of file r_sky.c.

Referenced by R_SkySphere().

Function Documentation

◆ LoadSky_f()

static void LoadSky_f ( cmd_state_t * cmd)
static

Definition at line 166 of file r_sky.c.

167{
168 switch (Cmd_Argc(cmd))
169 {
170 case 1:
171 if (skyname[0])
172 Con_Printf("current sky: %s\n", skyname);
173 else
174 Con_Print("no skybox has been set\n");
175 break;
176 case 2:
177 if (R_SetSkyBox(Cmd_Argv(cmd, 1)))
178 {
179 if (skyname[0])
180 Con_Printf("skybox set to %s\n", skyname);
181 else
182 Con_Print("skybox disabled\n");
183 }
184 else
185 Con_Printf(CON_ERROR "failed to load skybox %s\n", Cmd_Argv(cmd, 1));
186 break;
187 default:
188 Con_Print("usage: loadsky skyname\n");
189 break;
190 }
191}
static int Cmd_Argc(cmd_state_t *cmd)
Definition cmd.h:249
static const char * Cmd_Argv(cmd_state_t *cmd, int arg)
Cmd_Argv(cmd, ) will return an empty string (not a NULL) if arg > argc, so string operations are alwa...
Definition cmd.h:254
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
Definition console.c:1504
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
Definition console.c:1514
#define CON_ERROR
Definition console.h:102
void cmd(string command,...)
static char skyname[MAX_QPATH]
Definition r_sky.c:17
int R_SetSkyBox(const char *sky)
Definition r_sky.c:149

References cmd(), Cmd_Argc(), Cmd_Argv(), CON_ERROR, Con_Print(), Con_Printf(), R_SetSkyBox(), and skyname.

Referenced by R_Sky_Init().

◆ R_LoadSkyBox()

static int R_LoadSkyBox ( void )
static

Definition at line 98 of file r_sky.c.

99{
100 int i, j, success;
101 int indices[4] = {0,1,2,3};
102 char name[MAX_INPUTLINE];
103 unsigned char *image_buffer;
104 unsigned char *temp;
105 char vabuf[1024];
106
108
109 if (!skyname[0])
110 return true;
111
112 for (j=0; j<3; j++)
113 {
114 success = 0;
115 for (i=0; i<6; i++)
116 {
117 if (dpsnprintf(name, sizeof(name), "%s_%s", skyname, suffix[j][i].suffix) < 0 || !(image_buffer = loadimagepixelsbgra(name, false, false, false, NULL)))
118 {
119 if (dpsnprintf(name, sizeof(name), "%s%s", skyname, suffix[j][i].suffix) < 0 || !(image_buffer = loadimagepixelsbgra(name, false, false, false, NULL)))
120 {
121 if (dpsnprintf(name, sizeof(name), "env/%s%s", skyname, suffix[j][i].suffix) < 0 || !(image_buffer = loadimagepixelsbgra(name, false, false, false, NULL)))
122 {
123 if (dpsnprintf(name, sizeof(name), "gfx/env/%s%s", skyname, suffix[j][i].suffix) < 0 || !(image_buffer = loadimagepixelsbgra(name, false, false, false, NULL)))
124 continue;
125 }
126 }
127 }
128 temp = (unsigned char *)Mem_Alloc(tempmempool, image_width*image_height*4);
129 Image_CopyMux (temp, image_buffer, image_width, image_height, suffix[j][i].flipx, suffix[j][i].flipy, suffix[j][i].flipdiagonal, 4, 4, indices);
130 skyboxskinframe[i] = R_SkinFrame_LoadInternalBGRA(va(vabuf, sizeof(vabuf), "skyboxside%d", i), TEXF_CLAMP | (gl_texturecompression_sky.integer ? TEXF_COMPRESS : 0), temp, image_width, image_height, 0, 0, 0, vid.sRGB3D);
131 Mem_Free(image_buffer);
132 Mem_Free(temp);
133 success++;
134 }
135
136 if (success)
137 break;
138 }
139
140 if (j == 3)
141 return false;
142
144 Con_Printf("loading skybox \"%s\"\n", name);
145
146 return true;
147}
char * va(char *buf, size_t buflen, const char *format,...)
Definition common.c:972
int dpsnprintf(char *buffer, size_t buffersize, const char *format,...)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
Definition common.c:997
skinframe_t * R_SkinFrame_LoadInternalBGRA(const char *name, int textureflags, const unsigned char *skindata, int width, int height, int comparewidth, int compareheight, int comparecrc, qbool sRGB)
Definition gl_rmain.c:2546
cvar_t gl_texturecompression_sky
Definition gl_textures.c:45
GLsizei GLenum const GLvoid * indices
Definition glquake.h:674
const GLchar * name
Definition glquake.h:601
cvar_t developer_loading
Definition host.c:52
int image_height
Definition image.c:10
void Image_CopyMux(unsigned char *outpixels, const unsigned char *inpixels, int inputwidth, int inputheight, qbool inputflipx, qbool inputflipy, qbool inputflipdiagonal, int numoutputcomponents, int numinputcomponents, int *outputinputcomponentindices)
Definition image.c:24
unsigned char * loadimagepixelsbgra(const char *filename, qbool complain, qbool allowFixtrans, qbool convertsRGB, int *miplevel)
Definition image.c:1043
int image_width
Definition image.c:9
int i
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
Definition qdefs.h:94
#define NULL
Definition qtypes.h:12
static skinframe_t * skyboxskinframe[6]
Definition r_sky.c:55
static const suffixinfo_t suffix[3][6]
Definition r_sky.c:27
static void R_UnloadSkyBox(void)
Definition r_sky.c:81
#define TEXF_COMPRESS
Definition r_textures.h:23
#define TEXF_CLAMP
Definition r_textures.h:15
int integer
Definition cvar.h:73
qbool sRGB3D
whether 3D rendering is sRGB corrected (based on sRGBcapable3D)
Definition vid.h:76
viddef_t vid
global video state
Definition vid_shared.c:64
mempool_t * tempmempool
Definition zone.c:794
#define Mem_Free(mem)
Definition zone.h:96
#define Mem_Alloc(pool, size)
Definition zone.h:92

References Con_Printf(), developer_loading, dpsnprintf(), gl_texturecompression_sky, i, Image_CopyMux(), image_height, image_width, indices, cvar_t::integer, loadimagepixelsbgra(), MAX_INPUTLINE, Mem_Alloc, Mem_Free, name, NULL, R_SkinFrame_LoadInternalBGRA(), R_UnloadSkyBox(), skyboxskinframe, skyname, viddef_t::sRGB3D, suffix, tempmempool, TEXF_CLAMP, TEXF_COMPRESS, va(), and vid.

Referenced by R_ResetSkyBox(), R_SetSkyBox(), and r_sky_start().

◆ R_ResetSkyBox()

void R_ResetSkyBox ( void )

Definition at line 440 of file r_sky.c.

441{
443 memset(skyname,0,MAX_QPATH);
444 R_LoadSkyBox();
445}
#define MAX_QPATH
max length of a quake game pathname
Definition qdefs.h:169
static int R_LoadSkyBox(void)
Definition r_sky.c:98

References MAX_QPATH, R_LoadSkyBox(), R_UnloadSkyBox(), and skyname.

Referenced by CL_ClearState().

◆ R_SetSkyBox()

int R_SetSkyBox ( const char * sky)

Definition at line 149 of file r_sky.c.

150{
151 if (strcmp(sky, skyname) == 0) // no change
152 return true;
153
154 if (strlen(sky) > 1000)
155 {
156 Con_Printf("sky name too long (%i, max is 1000)\n", (int)strlen(sky));
157 return false;
158 }
159
160 dp_strlcpy(skyname, sky, sizeof(skyname));
161
162 return R_LoadSkyBox();
163}
#define dp_strlcpy(dst, src, dsize)
Definition common.h:303
float strlen(string s)

References Con_Printf(), dp_strlcpy, R_LoadSkyBox(), skyname, and strlen().

Referenced by CL_ParseEntityLump(), CL_ParseServerMessage(), and LoadSky_f().

◆ R_Sky()

void R_Sky ( void )

Definition at line 403 of file r_sky.c.

404{
407
409 {
410 // if the scissor is empty just return
411 if (skyscissor[2] == 0 || skyscissor[3] == 0)
412 return;
414 GL_ScissorTest(true);
415 }
416 if (skyrendersphere)
417 {
418 // this does not modify depth buffer
419 R_SkySphere();
420 }
421 else if (skyrenderbox)
422 {
423 // this does not modify depth buffer
424 R_SkyBox();
425 }
426 /* this will be skyroom someday
427 else
428 {
429 // this modifies the depth buffer so we have to clear it afterward
430 //R_SkyRoom();
431 // clear the depthbuffer that was used while rendering the skyroom
432 //GL_Clear(GL_DEPTH_BUFFER_BIT);
433 }
434 */
436}
void GL_Scissor(int x, int y, int width, int height)
void GL_ScissorTest(int state)
r_refdef_t r_refdef
Definition gl_rmain.c:57
void Matrix4x4_CreateFromQuakeEntity(matrix4x4_t *out, double x, double y, double z, double pitch, double yaw, double roll, double scale)
Definition matrixlib.c:715
void Matrix4x4_Invert_Simple(matrix4x4_t *out, const matrix4x4_t *in1)
Definition matrixlib.c:422
cvar_t r_sky_scissor
Definition r_sky.c:9
static matrix4x4_t skymatrix
Definition r_sky.c:18
static void R_SkyBox(void)
Definition r_sky.c:305
static matrix4x4_t skyinversematrix
Definition r_sky.c:19
static int skyrendersphere
Definition r_sky.c:14
static void R_SkySphere(void)
Definition r_sky.c:376
int skyscissor[4]
Definition r_sky.c:12
static int skyrenderbox
Definition r_sky.c:15
r_refdef_view_t view
Definition render.h:406
double farclip
Definition render.h:413
vec3_t origin
Definition render.h:267
r_viewport_t viewport
note: if r_viewscale is used, the viewport.width and viewport.height may be less than width and heigh...
Definition render.h:296

References r_refdef_t::farclip, GL_Scissor(), GL_ScissorTest(), r_viewport_t::height, cvar_t::integer, Matrix4x4_CreateFromQuakeEntity(), Matrix4x4_Invert_Simple(), r_refdef_view_t::origin, r_refdef, r_sky_scissor, R_SkyBox(), R_SkySphere(), skyinversematrix, skymatrix, skyrenderbox, skyrendersphere, skyscissor, r_refdef_t::view, r_refdef_view_t::viewport, r_viewport_t::width, r_viewport_t::x, and r_viewport_t::y.

Referenced by R_RenderScene().

◆ R_Sky_Init()

void R_Sky_Init ( void )

Definition at line 464 of file r_sky.c.

465{
466 Cmd_AddCommand(CF_CLIENT, "loadsky", &LoadSky_f, "load a skybox by basename (for example loadsky mtnsun_ loads mtnsun_ft.tga and so on)");
471 memset(&skyboxskinframe, 0, sizeof(skyboxskinframe));
472 skyname[0] = 0;
474}
void Cmd_AddCommand(unsigned flags, const char *cmd_name, xcommand_t function, const char *description)
called by the init functions of other parts of the program to register commands and functions to call...
Definition cmd.c:1661
#define CF_CLIENT
cvar/command that only the client can change/execute
Definition cmd.h:48
void Cvar_RegisterVariable(cvar_t *variable)
registers a cvar that already has the name, string, and optionally the archive elements set.
Definition cvar.c:599
void R_RegisterModule(const char *name, void(*start)(void), void(*shutdown)(void), void(*newmap)(void), void(*devicelost)(void), void(*devicerestored)(void))
Definition r_modules.c:25
static void r_sky_newmap(void)
Definition r_sky.c:459
cvar_t r_skyscroll1
Definition r_sky.c:7
static void r_sky_shutdown(void)
Definition r_sky.c:453
static void r_sky_start(void)
Definition r_sky.c:447
cvar_t r_sky
Definition r_sky.c:6
cvar_t r_skyscroll2
Definition r_sky.c:8
static void LoadSky_f(cmd_state_t *cmd)
Definition r_sky.c:166

References CF_CLIENT, Cmd_AddCommand(), Cvar_RegisterVariable(), LoadSky_f(), NULL, R_RegisterModule(), r_sky, r_sky_newmap(), r_sky_scissor, r_sky_shutdown(), r_sky_start(), r_skyscroll1, r_skyscroll2, skyboxskinframe, and skyname.

Referenced by Render_Init().

◆ r_sky_newmap()

static void r_sky_newmap ( void )
static

Definition at line 459 of file r_sky.c.

460{
461}

Referenced by R_Sky_Init().

◆ r_sky_shutdown()

static void r_sky_shutdown ( void )
static

Definition at line 453 of file r_sky.c.

454{
457}
void R_FreeTexturePool(rtexturepool_t **rtexturepool)
static rtexturepool_t * skytexturepool
Definition r_sky.c:16

References R_FreeTexturePool(), R_UnloadSkyBox(), and skytexturepool.

Referenced by R_Sky_Init().

◆ r_sky_start()

static void r_sky_start ( void )
static

Definition at line 447 of file r_sky.c.

448{
450 R_LoadSkyBox();
451}
rtexturepool_t * R_AllocTexturePool(void)

References R_AllocTexturePool(), R_LoadSkyBox(), and skytexturepool.

Referenced by R_Sky_Init().

◆ R_SkyBox()

static void R_SkyBox ( void )
static

Definition at line 305 of file r_sky.c.

306{
307 int i;
309 for (i = 0;i < 6;i++)
310 if(skyboxskinframe[i])
312}
void R_DrawCustomSurface(skinframe_t *skinframe, const matrix4x4_t *texmatrix, int materialflags, int firstvertex, int numvertices, int firsttriangle, int numtriangles, qbool writedepth, qbool prepass, qbool ui)
Definition gl_rmain.c:10152
void RSurf_ActiveCustomEntity(const matrix4x4_t *matrix, const matrix4x4_t *inversematrix, int entflags, double shadertime, float r, float g, float b, float a, int numvertices, const float *vertex3f, const float *texcoord2f, const float *normal3f, const float *svector3f, const float *tvector3f, const float *color4f, int numtriangles, const int *element3i, const unsigned short *element3s, qbool wantnormals, qbool wanttangents)
Definition gl_rmain.c:7146
const matrix4x4_t identitymatrix
Definition matrixlib.c:9
#define MATERIALFLAG_SKY
Definition model_brush.h:92
#define MATERIALFLAG_FULLBRIGHT
Definition model_brush.h:87
#define MATERIALFLAG_NODEPTHTEST
Definition model_brush.h:83
#define MATERIALFLAG_NOCULLFACE
static const float skyboxvertex3f[6 *4 *3]
Definition r_sky.c:193
static const float skyboxtexcoord2f[6 *4 *2]
Definition r_sky.c:227
static const unsigned short skyboxelement3s[6 *2 *3]
Definition r_sky.c:283
static const int skyboxelement3i[6 *2 *3]
Definition r_sky.c:261

References i, identitymatrix, MATERIALFLAG_FULLBRIGHT, MATERIALFLAG_NOCULLFACE, MATERIALFLAG_NODEPTHTEST, MATERIALFLAG_SKY, NULL, R_DrawCustomSurface(), RSurf_ActiveCustomEntity(), skyboxelement3i, skyboxelement3s, skyboxskinframe, skyboxtexcoord2f, skyboxvertex3f, skyinversematrix, and skymatrix.

Referenced by R_Sky().

◆ R_SkySphere()

static void R_SkySphere ( void )
static

Definition at line 376 of file r_sky.c.

377{
378 double speedscale;
379 static qbool skysphereinitialized = false;
380 matrix4x4_t scroll1matrix, scroll2matrix;
381 if (!skysphereinitialized)
382 {
383 skysphereinitialized = true;
385 }
386
387 // wrap the scroll values just to be extra kind to float accuracy
388
389 // scroll speed for upper layer
390 speedscale = r_refdef.scene.time*r_skyscroll1.value*8.0/128.0;
391 speedscale -= floor(speedscale);
392 Matrix4x4_CreateTranslate(&scroll1matrix, speedscale, speedscale, 0);
393 // scroll speed for lower layer (transparent layer)
394 speedscale = r_refdef.scene.time*r_skyscroll2.value*8.0/128.0;
395 speedscale -= floor(speedscale);
396 Matrix4x4_CreateTranslate(&scroll2matrix, speedscale, speedscale, 0);
397
401}
void Matrix4x4_CreateTranslate(matrix4x4_t *out, double x, double y, double z)
Definition matrixlib.c:584
float floor(float f)
#define MATERIALFLAG_ALPHA
Definition model_brush.h:79
#define MATERIALFLAG_BLENDED
bool qbool
Definition qtypes.h:9
static float skysphere_texcoord2f[skysphere_numverts *2]
Definition r_sky.c:323
#define skysphere_numtriangles
Definition r_sky.c:321
static void skyspherecalc(void)
Definition r_sky.c:327
#define skysphere_numverts
Definition r_sky.c:320
static unsigned short skysphere_element3s[skysphere_numtriangles *3]
Definition r_sky.c:325
static float skysphere_vertex3f[skysphere_numverts *3]
Definition r_sky.c:322
static int skysphere_element3i[skysphere_numtriangles *3]
Definition r_sky.c:324
float value
Definition cvar.h:74
struct skinframe_s * alphaskyskinframe
struct skinframe_s * solidskyskinframe
model_brush_t brush
model_t * worldmodel
same as worldentity->model
Definition render.h:358
double time
(client gameworld) time for rendering time based effects
Definition render.h:352
r_refdef_scene_t scene
Definition render.h:418

References model_brush_t::alphaskyskinframe, model_t::brush, floor(), MATERIALFLAG_ALPHA, MATERIALFLAG_BLENDED, MATERIALFLAG_FULLBRIGHT, MATERIALFLAG_NOCULLFACE, MATERIALFLAG_NODEPTHTEST, MATERIALFLAG_SKY, Matrix4x4_CreateTranslate(), NULL, R_DrawCustomSurface(), r_refdef, r_skyscroll1, r_skyscroll2, RSurf_ActiveCustomEntity(), r_refdef_t::scene, skyinversematrix, skymatrix, skysphere_element3i, skysphere_element3s, skysphere_numtriangles, skysphere_numverts, skysphere_texcoord2f, skysphere_vertex3f, skyspherecalc(), model_brush_t::solidskyskinframe, r_refdef_scene_t::time, cvar_t::value, and r_refdef_scene_t::worldmodel.

Referenced by R_Sky().

◆ R_SkyStartFrame()

void R_SkyStartFrame ( void )

Definition at line 57 of file r_sky.c.

58{
59 skyrendersphere = false;
60 skyrenderbox = false;
61 skyrendermasked = false;
62 // for depth-masked sky, we need to know whether any sky was rendered
63 skyrenderlater = false;
64 // we can scissor the sky to just the relevant area
66 if (r_sky.integer)
67 {
69 skyrenderbox = true;
71 skyrendersphere = true;
72 skyrendermasked = true;
73 }
74}
#define Vector4Clear(a)
Definition mathlib.h:82
int skyrendermasked
Definition r_sky.c:11
int skyrenderlater
Definition r_sky.c:10

References model_t::brush, cvar_t::integer, r_refdef, r_sky, r_refdef_t::scene, skyboxskinframe, skyrenderbox, skyrenderlater, skyrendermasked, skyrendersphere, skyscissor, model_brush_t::solidskyskinframe, Vector4Clear, and r_refdef_scene_t::worldmodel.

Referenced by R_RenderScene().

◆ R_UnloadSkyBox()

static void R_UnloadSkyBox ( void )
static

Definition at line 81 of file r_sky.c.

82{
83 int i;
84 int c = 0;
85 for (i = 0;i < 6;i++)
86 {
87 if (skyboxskinframe[i])
88 {
90 c++;
91 }
93 }
95 Con_Printf("unloading skybox\n");
96}
void R_SkinFrame_PurgeSkinFrame(skinframe_t *s)
Definition gl_rmain.c:2184

References Con_Printf(), developer_loading, i, cvar_t::integer, NULL, R_SkinFrame_PurgeSkinFrame(), and skyboxskinframe.

Referenced by R_LoadSkyBox(), R_ResetSkyBox(), and r_sky_shutdown().

◆ skyspherecalc()

static void skyspherecalc ( void )
static

Definition at line 327 of file r_sky.c.

328{
329 int i, j;
330 unsigned short *e;
331 float a, b, x, ax, ay, v[3], length, *vertex3f, *texcoord2f;
332 float dx, dy, dz;
333 dx = 16.0f;
334 dy = 16.0f;
335 dz = 16.0f / 3.0f;
336 vertex3f = skysphere_vertex3f;
337 texcoord2f = skysphere_texcoord2f;
338 for (j = 0;j <= skygridy;j++)
339 {
340 a = j * skygridyrecip;
341 ax = cos(a * M_PI * 2);
342 ay = -sin(a * M_PI * 2);
343 for (i = 0;i <= skygridx;i++)
344 {
345 b = i * skygridxrecip;
346 x = cos((b + 0.5) * M_PI);
347 v[0] = ax*x * dx;
348 v[1] = ay*x * dy;
349 v[2] = -sin((b + 0.5) * M_PI) * dz;
350 length = 3.0f / sqrt(v[0]*v[0]+v[1]*v[1]+(v[2]*v[2]*9));
351 *texcoord2f++ = v[0] * length;
352 *texcoord2f++ = v[1] * length;
353 *vertex3f++ = v[0];
354 *vertex3f++ = v[1];
355 *vertex3f++ = v[2];
356 }
357 }
359 for (j = 0;j < skygridy;j++)
360 {
361 for (i = 0;i < skygridx;i++)
362 {
363 *e++ = j * skygridx1 + i;
364 *e++ = j * skygridx1 + i + 1;
365 *e++ = (j + 1) * skygridx1 + i;
366
367 *e++ = j * skygridx1 + i + 1;
368 *e++ = (j + 1) * skygridx1 + i + 1;
369 *e++ = (j + 1) * skygridx1 + i;
370 }
371 }
372 for (i = 0;i < skysphere_numtriangles*3;i++)
374}
GLenum GLuint GLenum GLsizei length
Definition glquake.h:657
const GLdouble * v
Definition glquake.h:762
GLint GLenum GLint x
Definition glquake.h:651
#define M_PI
Definition mathlib.h:28
float cos(float f)
float sqrt(float f)
float sin(float f)
#define skygridxrecip
Definition r_sky.c:316
#define skygridyrecip
Definition r_sky.c:319
#define skygridx1
Definition r_sky.c:315
#define skygridx
Definition r_sky.c:314
#define skygridy
Definition r_sky.c:317
dp_FragColor b
ret a

References a, b, cos(), i, length, M_PI, sin(), skygridx, skygridx1, skygridxrecip, skygridy, skygridyrecip, skysphere_element3i, skysphere_element3s, skysphere_numtriangles, skysphere_texcoord2f, skysphere_vertex3f, sqrt(), v, and x.

Referenced by R_SkySphere().

Variable Documentation

◆ r_sky

cvar_t r_sky = {CF_CLIENT | CF_ARCHIVE, "r_sky", "1", "enables sky rendering (black otherwise)"}

Definition at line 6 of file r_sky.c.

6{CF_CLIENT | CF_ARCHIVE, "r_sky", "1", "enables sky rendering (black otherwise)"};
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
Definition cmd.h:53

Referenced by R_Sky_Init(), and R_SkyStartFrame().

◆ r_sky_scissor

cvar_t r_sky_scissor = {CF_CLIENT, "r_sky_scissor", "1", "limit rendering of sky to approximately the area of the sky surfaces"}

Definition at line 9 of file r_sky.c.

9{CF_CLIENT, "r_sky_scissor", "1", "limit rendering of sky to approximately the area of the sky surfaces"};

Referenced by R_DrawTextureSurfaceList_Sky(), R_Sky(), and R_Sky_Init().

◆ r_skyscroll1

cvar_t r_skyscroll1 = {CF_CLIENT | CF_ARCHIVE, "r_skyscroll1", "1", "speed at which upper clouds layer scrolls in quake sky"}

Definition at line 7 of file r_sky.c.

7{CF_CLIENT | CF_ARCHIVE, "r_skyscroll1", "1", "speed at which upper clouds layer scrolls in quake sky"};

Referenced by M_Menu_Options_Effects_AdjustSliders(), M_Options_Effects_Draw(), R_Sky_Init(), and R_SkySphere().

◆ r_skyscroll2

cvar_t r_skyscroll2 = {CF_CLIENT | CF_ARCHIVE, "r_skyscroll2", "2", "speed at which lower clouds layer scrolls in quake sky"}

Definition at line 8 of file r_sky.c.

8{CF_CLIENT | CF_ARCHIVE, "r_skyscroll2", "2", "speed at which lower clouds layer scrolls in quake sky"};

Referenced by M_Menu_Options_Effects_AdjustSliders(), M_Options_Effects_Draw(), R_Sky_Init(), and R_SkySphere().

◆ skyboxelement3i

const int skyboxelement3i[6 *2 *3]
static
Initial value:
=
{
0, 1, 2,
0, 2, 3,
4, 5, 6,
4, 6, 7,
8, 9, 10,
8, 10, 11,
12, 13, 14,
12, 14, 15,
16, 17, 18,
16, 18, 19,
20, 21, 22,
20, 22, 23
}

Definition at line 261 of file r_sky.c.

262{
263 // skyside[3]
264 0, 1, 2,
265 0, 2, 3,
266 // skyside[1]
267 4, 5, 6,
268 4, 6, 7,
269 // skyside[0]
270 8, 9, 10,
271 8, 10, 11,
272 // skyside[2]
273 12, 13, 14,
274 12, 14, 15,
275 // skyside[4]
276 16, 17, 18,
277 16, 18, 19,
278 // skyside[5]
279 20, 21, 22,
280 20, 22, 23
281};

Referenced by R_SkyBox().

◆ skyboxelement3s

const unsigned short skyboxelement3s[6 *2 *3]
static
Initial value:
=
{
0, 1, 2,
0, 2, 3,
4, 5, 6,
4, 6, 7,
8, 9, 10,
8, 10, 11,
12, 13, 14,
12, 14, 15,
16, 17, 18,
16, 18, 19,
20, 21, 22,
20, 22, 23
}

Definition at line 283 of file r_sky.c.

284{
285 // skyside[3]
286 0, 1, 2,
287 0, 2, 3,
288 // skyside[1]
289 4, 5, 6,
290 4, 6, 7,
291 // skyside[0]
292 8, 9, 10,
293 8, 10, 11,
294 // skyside[2]
295 12, 13, 14,
296 12, 14, 15,
297 // skyside[4]
298 16, 17, 18,
299 16, 18, 19,
300 // skyside[5]
301 20, 21, 22,
302 20, 22, 23
303};

Referenced by R_SkyBox().

◆ skyboxskinframe

skinframe_t* skyboxskinframe[6]
static

Definition at line 55 of file r_sky.c.

Referenced by R_LoadSkyBox(), R_Sky_Init(), R_SkyBox(), R_SkyStartFrame(), and R_UnloadSkyBox().

◆ skyboxtexcoord2f

const float skyboxtexcoord2f[6 *4 *2]
static

Definition at line 227 of file r_sky.c.

228{
229 // skyside[0]
230 0, 1,
231 1, 1,
232 1, 0,
233 0, 0,
234 // skyside[1]
235 1, 0,
236 0, 0,
237 0, 1,
238 1, 1,
239 // skyside[2]
240 1, 1,
241 1, 0,
242 0, 0,
243 0, 1,
244 // skyside[3]
245 0, 0,
246 0, 1,
247 1, 1,
248 1, 0,
249 // skyside[4]
250 0, 1,
251 1, 1,
252 1, 0,
253 0, 0,
254 // skyside[5]
255 0, 1,
256 1, 1,
257 1, 0,
258 0, 0
259};

Referenced by R_SkyBox().

◆ skyboxvertex3f

const float skyboxvertex3f[6 *4 *3]
static

Definition at line 193 of file r_sky.c.

194{
195 // skyside[0]
196 16, -16, 16,
197 16, -16, -16,
198 16, 16, -16,
199 16, 16, 16,
200 // skyside[1]
201 -16, 16, 16,
202 -16, 16, -16,
203 -16, -16, -16,
204 -16, -16, 16,
205 // skyside[2]
206 16, 16, 16,
207 16, 16, -16,
208 -16, 16, -16,
209 -16, 16, 16,
210 // skyside[3]
211 -16, -16, 16,
212 -16, -16, -16,
213 16, -16, -16,
214 16, -16, 16,
215 // skyside[4]
216 -16, -16, 16,
217 16, -16, 16,
218 16, 16, 16,
219 -16, 16, 16,
220 // skyside[5]
221 16, -16, -16,
222 -16, -16, -16,
223 -16, 16, -16,
224 16, 16, -16
225};

Referenced by R_SkyBox().

◆ skyinversematrix

matrix4x4_t skyinversematrix
static

Definition at line 19 of file r_sky.c.

Referenced by R_Sky(), R_SkyBox(), and R_SkySphere().

◆ skymatrix

matrix4x4_t skymatrix
static

Definition at line 18 of file r_sky.c.

Referenced by R_Sky(), R_SkyBox(), and R_SkySphere().

◆ skyname

char skyname[MAX_QPATH]
static

Definition at line 17 of file r_sky.c.

Referenced by LoadSky_f(), R_LoadSkyBox(), R_ResetSkyBox(), R_SetSkyBox(), and R_Sky_Init().

◆ skyrenderbox

int skyrenderbox
static

Definition at line 15 of file r_sky.c.

Referenced by R_Sky(), and R_SkyStartFrame().

◆ skyrenderlater

int skyrenderlater

Definition at line 10 of file r_sky.c.

Referenced by R_DrawTextureSurfaceList_Sky(), R_RenderScene(), and R_SkyStartFrame().

◆ skyrendermasked

int skyrendermasked

Definition at line 11 of file r_sky.c.

Referenced by R_DrawTextureSurfaceList_Sky(), R_RenderScene(), and R_SkyStartFrame().

◆ skyrendersphere

int skyrendersphere
static

Definition at line 14 of file r_sky.c.

Referenced by R_Sky(), and R_SkyStartFrame().

◆ skyscissor

int skyscissor[4]

Definition at line 12 of file r_sky.c.

Referenced by R_DrawTextureSurfaceList_Sky(), R_Sky(), and R_SkyStartFrame().

◆ skysphere_element3i

int skysphere_element3i[skysphere_numtriangles *3]
static

Definition at line 324 of file r_sky.c.

Referenced by R_SkySphere(), and skyspherecalc().

◆ skysphere_element3s

unsigned short skysphere_element3s[skysphere_numtriangles *3]
static

Definition at line 325 of file r_sky.c.

Referenced by R_SkySphere(), and skyspherecalc().

◆ skysphere_texcoord2f

float skysphere_texcoord2f[skysphere_numverts *2]
static

Definition at line 323 of file r_sky.c.

Referenced by R_SkySphere(), and skyspherecalc().

◆ skysphere_vertex3f

float skysphere_vertex3f[skysphere_numverts *3]
static

Definition at line 322 of file r_sky.c.

Referenced by R_SkySphere(), and skyspherecalc().

◆ skytexturepool

rtexturepool_t* skytexturepool
static

Definition at line 16 of file r_sky.c.

Referenced by r_sky_shutdown(), and r_sky_start().

◆ suffix

const suffixinfo_t suffix[3][6]
static
Initial value:
=
{
{
{"px", false, false, false},
{"nx", false, false, false},
{"py", false, false, false},
{"ny", false, false, false},
{"pz", false, false, false},
{"nz", false, false, false}
},
{
{"posx", false, false, false},
{"negx", false, false, false},
{"posy", false, false, false},
{"negy", false, false, false},
{"posz", false, false, false},
{"negz", false, false, false}
},
{
{"rt", false, false, true},
{"lf", true, true, true},
{"bk", false, true, false},
{"ft", true, false, false},
{"up", false, false, true},
{"dn", false, false, true}
}
}

Definition at line 27 of file r_sky.c.

28{
29 {
30 {"px", false, false, false},
31 {"nx", false, false, false},
32 {"py", false, false, false},
33 {"ny", false, false, false},
34 {"pz", false, false, false},
35 {"nz", false, false, false}
36 },
37 {
38 {"posx", false, false, false},
39 {"negx", false, false, false},
40 {"posy", false, false, false},
41 {"negy", false, false, false},
42 {"posz", false, false, false},
43 {"negz", false, false, false}
44 },
45 {
46 {"rt", false, false, true},
47 {"lf", true, true, true},
48 {"bk", false, true, false},
49 {"ft", true, false, false},
50 {"up", false, false, true},
51 {"dn", false, false, true}
52 }
53};

Referenced by R_LoadSkyBox().