Пример #1
0
/*	Called once per frame before drawing anything else
*/
void Sky_Draw(void)
{
	int	i;

	// In these special render modes, the sky faces are handled in the normal world/brush renderer
	if (r_drawflat_cheatsafe || r_lightmap_cheatsafe || !cv_video_drawsky.bValue)
		return;

	// Reset sky bounds.
	for(i = 0; i < 6; i++)
	{
		skymins[0][i] = skymins[1][i] = 9999;
		skymaxs[0][i] = skymaxs[1][i] = -9999;
	}

	// Process world and bmodels: draw flat-shaded sky surfs, and update skybounds
	Fog_DisableGFog();

	VideoLayer_Disable(VIDEO_TEXTURE_2D);

	if(Fog_GetDensity() > 0)
		glColor3fv(Fog_GetColor());
	else
		glColor3fv(skyflatcolor);

	Sky_ProcessTextureChains();
	Sky_ProcessEntities();

	glColor3f(1.0f,1.0f,1.0f);

	VideoLayer_Enable(VIDEO_TEXTURE_2D);

	// Render slow sky: cloud layers or skybox
	if(!r_fastsky.value && !(Fog_GetDensity() > 0 && r_skyfog.value >= 1))
	{
		VideoLayer_Disable(VIDEO_DEPTH_TEST);

		// By default we use a skybox.
		if(cSkyBoxName[0])
			Sky_DrawSkyBox();

		if(cv_video_drawclouds.value && gCloudTexture)
		{
			// Draw the scrolling clouds...
			for(i = 0; i < 6; i++)
				if(skymins[0][i] < skymaxs[0][i] && skymins[1][i] < skymaxs[1][i])
					Sky_DrawFace(i);
		}

		VideoLayer_Enable(VIDEO_DEPTH_TEST);
	}

	Fog_EnableGFog();

	// 3D skybox support.
	if (cl.worldmodel && (cl.worldmodel->flags & MODEL_FLAG_3DSKY))
		Sky_Draw3DWorld();
}
Пример #2
0
/*
=============
Fog_StartAdditive

called before drawing stuff that is additive blended -- sets fog color to black
=============
*/
void Fog_StartAdditive (void)
{
	vec3_t color = {0,0,0};

	if (Fog_GetDensity() > 0)
		glFogfv(GL_FOG_COLOR, color);
}
Пример #3
0
void R_RenderModelSurfsSky (r_modelsurf_t **mslist, int numms)
{
    Fog_DisableGFog ();

    if (skybox_name[0])
    {
        // we have working skybox cubemap code now
        Sky_DrawCubeMap (mslist, numms);
    }
//	else if (gl_support_shader_objects)
//	{
//		R_RenderModelSurfsSkyPass (mslist, numms, SKY_GLSL);
//		goto glsl_sky;
//	}
    else R_RenderModelSurfsSkyPass (mslist, numms, SKY_DEPTHCLIP);

    // same pass for all sky fog just using the base verts
    if (Fog_GetDensity () > 0 && r_skyfog.value > 0)
        R_RenderModelSurfsSkyPass (mslist, numms, SKY_FOG_LAYER);

//glsl_sky:;
    if (r_showtris.value)
        R_RenderModelSurfsSkyPass (mslist, numms, SKY_SHOWTRIS);

    Fog_EnableGFog ();
}
Пример #4
0
void Sky_DrawSkyBox (void)
{
	int	i;

	for(i = 0; i < 6; i++)
	{
		if (skymins[0][i] >= skymaxs[0][i] || skymins[1][i] >= skymaxs[1][i])
			continue;

		Video_SetTexture(gSkyBoxTexture[skytexorder[i]]);

#if 1 //FIXME: this is to avoid tjunctions until i can do it the right way
		skymins[0][i] = -1;
		skymins[1][i] = -1;
		skymaxs[0][i] = 1;
		skymaxs[1][i] = 1;
#endif

		glBegin(GL_QUADS);
		Sky_EmitSkyBoxVertex (skymins[0][i], skymins[1][i], i);
		Sky_EmitSkyBoxVertex (skymins[0][i], skymaxs[1][i], i);
		Sky_EmitSkyBoxVertex (skymaxs[0][i], skymaxs[1][i], i);
		Sky_EmitSkyBoxVertex (skymaxs[0][i], skymins[1][i], i);
		glEnd();

		rs_skypolys++;
		rs_skypasses++;

		if (Fog_GetDensity() > 0 && r_skyfog.value > 0)
		{
			float *c;

			c = Fog_GetColor();

			VideoLayer_Enable(VIDEO_BLEND);
			VideoLayer_Disable(VIDEO_TEXTURE_2D);

			glColor4f(c[0], c[1], c[2], Math_Clamp(0, r_skyfog.value, 1.0f));

			glBegin(GL_QUADS);
			Sky_EmitSkyBoxVertex (skymins[0][i], skymins[1][i], i);
			Sky_EmitSkyBoxVertex (skymins[0][i], skymaxs[1][i], i);
			Sky_EmitSkyBoxVertex (skymaxs[0][i], skymaxs[1][i], i);
			Sky_EmitSkyBoxVertex (skymaxs[0][i], skymins[1][i], i);
			glEnd();

			glColor3f(1.0f,1.0f,1.0f);

			VideoLayer_Enable(VIDEO_TEXTURE_2D);
			VideoLayer_Disable(VIDEO_BLEND);

			rs_skypasses++;
		}
	}
}
Пример #5
0
void Sky_DrawFaceQuad(glpoly_t *p)
{
	float	s,t,
			*v;
	int		i;

	glColor3f(1.0f,1.0f,1.0f);

	Video_SetTexture(gCloudTexture);

	VideoLayer_Enable(VIDEO_BLEND);
	VideoLayer_BlendFunc(VIDEO_BLEND_ONE, VIDEO_BLEND_ONE);

	glBegin(GL_QUADS);

	for (i = 0, v = p->verts[0]; i < 4; i++, v += VERTEXSIZE)
	{
		Sky_GetTexCoord(v,cv_sky_scrollspeed.value,&s,&t);

		glTexCoord2f(s,t);
		glVertex3fv(v);
	}

	glEnd();

	VideoLayer_BlendFunc(VIDEO_BLEND_DEFAULT);

	rs_skypolys++;
	rs_skypasses++;

	if(Fog_GetDensity() > 0 && r_skyfog.value > 0)
	{
		float *c = Fog_GetColor();

		VideoLayer_Disable(VIDEO_TEXTURE_2D);

		glColor4f(c[0], c[1], c[2], Math_Clamp(0.0, r_skyfog.value, 1.0));

		glBegin(GL_QUADS);
		for(i = 0,v = p->verts[0]; i < 4; i++,v += VERTEXSIZE)
			glVertex3fv(v);
		glEnd();

		glColor3f(1.0f,1.0f,1.0f);

		VideoLayer_Enable(VIDEO_TEXTURE_2D);

		rs_skypasses++;
	}

	VideoLayer_Disable(VIDEO_BLEND);
}
Пример #6
0
/*
=============
Fog_StopAdditive

called after drawing stuff that is additive blended -- restores fog color
=============
*/
void Fog_StopAdditive (void)
{
	if (Fog_GetDensity() > 0)
		glFogfv(GL_FOG_COLOR, Fog_GetColor());
}
Пример #7
0
/*
=============
Fog_DisableGFog

called after drawing stuff that should be fogged
=============
*/
void Fog_DisableGFog (void)
{
	if (Fog_GetDensity() > 0)
		glDisable(GL_FOG);
}
Пример #8
0
/*
=============
Fog_EnableGFog

called before drawing stuff that should be fogged
=============
*/
void Fog_EnableGFog (void)
{
	if (Fog_GetDensity() > 0)
		glEnable(GL_FOG);
}
Пример #9
0
/*
=============
Fog_SetupFrame

called at the beginning of each frame
=============
*/
void Fog_SetupFrame (void)
{
	glFogfv(GL_FOG_COLOR, Fog_GetColor());
	glFogf(GL_FOG_DENSITY, Fog_GetDensity() / 64.0);
}