gl_rmisc.c

来自「quake1 dos源代码最新版本」· C语言 代码 · 共 530 行 · 第 1/2 页

C
530
字号
/*
Copyright (C) 1996-1997 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
// r_misc.c

#include "quakedef.h"

cvar_t	*gl_glowmap;	// 1999-12-28 OpenGL fullbright fix by Neal White III
cvar_t	*gl_maxdepth;	// 2002-01-31 GLQuake HOM fix by Matador

/*
==================
R_InitTextures
==================
*/
void	R_InitTextures (void)
{
	int		x,y, m;
	byte	*dest;

// create a simple checkerboard texture for the default
	r_notexture_mip = Hunk_AllocName (sizeof(texture_t) + 16*16+8*8+4*4+2*2, "notexture");

	r_notexture_mip->width = r_notexture_mip->height = 16;
	r_notexture_mip->offsets[0] = sizeof(texture_t);
	r_notexture_mip->offsets[1] = r_notexture_mip->offsets[0] + 16*16;
	r_notexture_mip->offsets[2] = r_notexture_mip->offsets[1] + 8*8;
	r_notexture_mip->offsets[3] = r_notexture_mip->offsets[2] + 4*4;

	for (m=0 ; m<4 ; m++)
	{
		dest = (byte *)r_notexture_mip + r_notexture_mip->offsets[m];
		for (y=0 ; y< (16>>m) ; y++)
			for (x=0 ; x< (16>>m) ; x++)
			{
				if (  (y< (8>>m) ) ^ (x< (8>>m) ) )
					*dest++ = 0;
				else
					*dest++ = 0xff;
			}
	}
}

byte	dottexture[8][8] =
{
	{0,1,1,0,0,0,0,0},
	{1,1,1,1,0,0,0,0},
	{1,1,1,1,0,0,0,0},
	{0,1,1,0,0,0,0,0},
	{0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0},
	{0,0,0,0,0,0,0,0},
};
void R_InitParticleTexture (void)
{
	int		x,y;
	byte	data[8][8][4];

	//
	// particle texture
	//
	particletexture = texture_extension_number++;
	GL_Bind(particletexture);

	for (x=0 ; x<8 ; x++)
	{
		for (y=0 ; y<8 ; y++)
		{
			data[y][x][0] = 255;
			data[y][x][1] = 255;
			data[y][x][2] = 255;
			data[y][x][3] = dottexture[x][y]*255;
		}
	}
	glTexImage2D (GL_TEXTURE_2D, 0, gl_alpha_format, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}

/*
===============
R_Envmap_f

Grab six views for environment mapping tests
===============
*/
void R_Envmap_f (void)
{
	byte	buffer[256*256*4];
	char	name[1024];

	glDrawBuffer  (GL_FRONT);
	glReadBuffer  (GL_FRONT);
	envmap = true;

	r_refdef.vrect.x = 0;
	r_refdef.vrect.y = 0;
	r_refdef.vrect.width = 256;
	r_refdef.vrect.height = 256;

	r_refdef.viewangles[0] = 0;
	r_refdef.viewangles[1] = 0;
	r_refdef.viewangles[2] = 0;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env0.rgb", buffer, sizeof(buffer));

	r_refdef.viewangles[1] = 90;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env1.rgb", buffer, sizeof(buffer));

	r_refdef.viewangles[1] = 180;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env2.rgb", buffer, sizeof(buffer));

	r_refdef.viewangles[1] = 270;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env3.rgb", buffer, sizeof(buffer));

	r_refdef.viewangles[0] = -90;
	r_refdef.viewangles[1] = 0;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env4.rgb", buffer, sizeof(buffer));

	r_refdef.viewangles[0] = 90;
	r_refdef.viewangles[1] = 0;
	GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
	R_RenderView ();
	glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
	COM_WriteFile ("env5.rgb", buffer, sizeof(buffer));

	envmap = false;
	glDrawBuffer  (GL_BACK);
	glReadBuffer  (GL_BACK);
	GL_EndRendering ();
}

// 2001-09-18 New cvar system by Maddes (Init)  start
/*
===============
R_Init_Cvars
===============
*/
void
R_Init_Cvars (void)
{
	extern cvar_t	*gl_finish;

	r_norefresh = Cvar_Get ("r_norefresh", "0", CVAR_ORIGINAL);
	r_lightmap = Cvar_Get ("r_lightmap", "0", CVAR_ORIGINAL);
	r_fullbright = Cvar_Get ("r_fullbright", "0", CVAR_ORIGINAL);
	r_drawentities = Cvar_Get ("r_drawentities", "1", CVAR_ORIGINAL);
	r_drawviewmodel = Cvar_Get ("r_drawviewmodel", "1", CVAR_ORIGINAL);
	r_shadows = Cvar_Get ("r_shadows", "0", CVAR_ORIGINAL);
	r_mirroralpha = Cvar_Get ("r_mirroralpha", "1", CVAR_ORIGINAL);
	r_wateralpha = Cvar_Get ("r_wateralpha", "1", CVAR_ORIGINAL);
	r_dynamic = Cvar_Get ("r_dynamic", "1", CVAR_ORIGINAL);
	r_novis = Cvar_Get ("r_novis", "0", CVAR_ORIGINAL);
	r_speeds = Cvar_Get ("r_speeds", "0", CVAR_ORIGINAL);
	r_waterwarp = Cvar_Get ("r_waterwarp", "1", CVAR_ORIGINAL);	// 2000-01-02 Missing R_WATERWARP fix by Radix

	gl_finish = Cvar_Get ("gl_finish", "0", CVAR_ORIGINAL);
	gl_clear = Cvar_Get ("gl_clear", "0", CVAR_ORIGINAL);
	gl_texsort = Cvar_Get ("gl_texsort", "1", CVAR_ORIGINAL);
// 1999-12-28 OpenGL fullbright fix by Neal White III  start
	gl_glowmap = Cvar_Get ("gl_glowmap", "0", CVAR_NONE);
	Cvar_SetRangecheck (gl_glowmap, Cvar_RangecheckBool, 0, 1);
	Cvar_Set(gl_glowmap, gl_glowmap->string);	// do rangecheck
// 1999-12-28 OpenGL fullbright fix by Neal White III  end

 	if (gl_mtexable)
	{	// 1999-12-28 OpenGL fullbright fix by Neal White III
		Cvar_Set (gl_texsort, "0");
// 1999-12-28 OpenGL fullbright fix by Neal White III  start
		Cvar_Set (gl_glowmap, "1");
	}
// 1999-12-28 OpenGL fullbright fix by Neal White III  end

	gl_cull = Cvar_Get ("gl_cull", "1", CVAR_ORIGINAL);
	gl_smoothmodels = Cvar_Get ("gl_smoothmodels", "1", CVAR_ORIGINAL);
	gl_affinemodels = Cvar_Get ("gl_affinemodels", "0", CVAR_ORIGINAL);
	gl_polyblend = Cvar_Get ("gl_polyblend", "1", CVAR_ORIGINAL);
	gl_flashblend = Cvar_Get ("gl_flashblend", "1", CVAR_ORIGINAL);
	gl_playermip = Cvar_Get ("gl_playermip", "0", CVAR_ORIGINAL);
	gl_nocolors = Cvar_Get ("gl_nocolors", "0", CVAR_ORIGINAL);
	gl_keeptjunctions = Cvar_Get ("gl_keeptjunctions", "0", CVAR_ORIGINAL);
	gl_reporttjunctions = Cvar_Get ("gl_reporttjunctions", "0", CVAR_ORIGINAL);
	gl_doubleeyes = Cvar_Get ("gl_doubleeys", "1", CVAR_ORIGINAL);

// 2002-01-31 GLQuake HOM fix by Matador  start
	gl_maxdepth = Cvar_Get ("gl_maxdepth", "4096", CVAR_NONE);
	Cvar_SetRangecheck (gl_maxdepth, Cvar_RangecheckInt, 4096, 8192);
	Cvar_Set(gl_maxdepth, gl_maxdepth->string);	// do rangecheck
// 2002-01-31 GLQuake HOM fix by Matador  end
}
// 2001-09-18 New cvar system by Maddes (Init)  end

/*
===============
R_Init
===============
*/
void R_Init (void)
{
	extern byte	*hunk_base;
//	extern cvar_t	*gl_finish;	// 2001-09-18 New cvar system by Maddes (Init)

	Cmd_AddCommand ("timerefresh", R_TimeRefresh_f);
	Cmd_AddCommand ("envmap", R_Envmap_f);
	Cmd_AddCommand ("pointfile", R_ReadPointFile_f);

// 2001-09-18 New cvar system by Maddes (Init)  start
/*
	r_norefresh = Cvar_Get ("r_norefresh", "0", CVAR_ORIGINAL);
	r_lightmap = Cvar_Get ("r_lightmap", "0", CVAR_ORIGINAL);
	r_fullbright = Cvar_Get ("r_fullbright", "0", CVAR_ORIGINAL);
	r_drawentities = Cvar_Get ("r_drawentities", "1", CVAR_ORIGINAL);
	r_drawviewmodel = Cvar_Get ("r_drawviewmodel", "1", CVAR_ORIGINAL);
	r_shadows = Cvar_Get ("r_shadows", "0", CVAR_ORIGINAL);
	r_mirroralpha = Cvar_Get ("r_mirroralpha", "1", CVAR_ORIGINAL);
	r_wateralpha = Cvar_Get ("r_wateralpha", "1", CVAR_ORIGINAL);
	r_dynamic = Cvar_Get ("r_dynamic", "1", CVAR_ORIGINAL);
	r_novis = Cvar_Get ("r_novis", "0", CVAR_ORIGINAL);
	r_speeds = Cvar_Get ("r_speeds", "0", CVAR_ORIGINAL);
	r_waterwarp = Cvar_Get ("r_waterwarp", "1", CVAR_ORIGINAL);	// 2000-01-02 Missing R_WATERWARP fix by Radix

	gl_finish = Cvar_Get ("gl_finish", "0", CVAR_ORIGINAL);
	gl_clear = Cvar_Get ("gl_clear", "0", CVAR_ORIGINAL);
	gl_texsort = Cvar_Get ("gl_texsort", "1", CVAR_ORIGINAL);
// 1999-12-28 OpenGL fullbright fix by Neal White III  start
	gl_glowmap = Cvar_Get ("gl_glowmap", "0", CVAR_NONE);
	Cvar_SetRangecheck (gl_glowmap, Cvar_RangecheckBool, 0, 1);
	Cvar_Set(gl_glowmap, gl_glowmap->string);	// do rangecheck
// 1999-12-28 OpenGL fullbright fix by Neal White III  end

 	if (gl_mtexable)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?