亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? r_main.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
Copyright (C) 1997-2001 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_main.c

#include "r_local.h"

viddef_t	vid;
refimport_t	ri;

unsigned	d_8to24table[256];

entity_t	r_worldentity;

char		skyname[MAX_QPATH];
float		skyrotate;
vec3_t		skyaxis;
image_t		*sky_images[6];

refdef_t	r_newrefdef;
model_t		*currentmodel;

model_t		*r_worldmodel;

byte		r_warpbuffer[WARP_WIDTH * WARP_HEIGHT];

swstate_t sw_state;

void		*colormap;
vec3_t		viewlightvec;
alight_t	r_viewlighting = {128, 192, viewlightvec};
float		r_time1;
int			r_numallocatededges;
float		r_aliasuvscale = 1.0;
int			r_outofsurfaces;
int			r_outofedges;

qboolean	r_dowarp;

mvertex_t	*r_pcurrentvertbase;

int			c_surf;
int			r_maxsurfsseen, r_maxedgesseen, r_cnumsurfs;
qboolean	r_surfsonstack;
int			r_clipflags;

//
// view origin
//
vec3_t	vup, base_vup;
vec3_t	vpn, base_vpn;
vec3_t	vright, base_vright;
vec3_t	r_origin;

//
// screen size info
//
oldrefdef_t	r_refdef;
float		xcenter, ycenter;
float		xscale, yscale;
float		xscaleinv, yscaleinv;
float		xscaleshrink, yscaleshrink;
float		aliasxscale, aliasyscale, aliasxcenter, aliasycenter;

int		r_screenwidth;

float	verticalFieldOfView;
float	xOrigin, yOrigin;

mplane_t	screenedge[4];

//
// refresh flags
//
int		r_framecount = 1;	// so frame counts initialized to 0 don't match
int		r_visframecount;
int		d_spanpixcount;
int		r_polycount;
int		r_drawnpolycount;
int		r_wholepolycount;

int			*pfrustum_indexes[4];
int			r_frustum_indexes[4*6];

mleaf_t		*r_viewleaf;
int			r_viewcluster, r_oldviewcluster;

image_t  	*r_notexture_mip;

float	da_time1, da_time2, dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2;
float	se_time1, se_time2, de_time1, de_time2;

void R_MarkLeaves (void);

cvar_t	*r_lefthand;
cvar_t	*sw_aliasstats;
cvar_t	*sw_allow_modex;
cvar_t	*sw_clearcolor;
cvar_t	*sw_drawflat;
cvar_t	*sw_draworder;
cvar_t	*sw_maxedges;
cvar_t	*sw_maxsurfs;
cvar_t  *sw_mode;
cvar_t	*sw_reportedgeout;
cvar_t	*sw_reportsurfout;
cvar_t  *sw_stipplealpha;
cvar_t	*sw_surfcacheoverride;
cvar_t	*sw_waterwarp;

cvar_t	*r_drawworld;
cvar_t	*r_drawentities;
cvar_t	*r_dspeeds;
cvar_t	*r_fullbright;
cvar_t  *r_lerpmodels;
cvar_t  *r_novis;

cvar_t	*r_speeds;
cvar_t	*r_lightlevel;	//FIXME HACK

cvar_t	*vid_fullscreen;
cvar_t	*vid_gamma;

//PGM
cvar_t	*sw_lockpvs;
//PGM

#define	STRINGER(x) "x"


#if	!id386

// r_vars.c

// all global and static refresh variables are collected in a contiguous block
// to avoid cache conflicts.

//-------------------------------------------------------
// global refresh variables
//-------------------------------------------------------

// FIXME: make into one big structure, like cl or sv
// FIXME: do separately for refresh engine and driver


// d_vars.c

// all global and static refresh variables are collected in a contiguous block
// to avoid cache conflicts.

//-------------------------------------------------------
// global refresh variables
//-------------------------------------------------------

// FIXME: make into one big structure, like cl or sv
// FIXME: do separately for refresh engine and driver

float	d_sdivzstepu, d_tdivzstepu, d_zistepu;
float	d_sdivzstepv, d_tdivzstepv, d_zistepv;
float	d_sdivzorigin, d_tdivzorigin, d_ziorigin;

fixed16_t	sadjust, tadjust, bbextents, bbextentt;

pixel_t			*cacheblock;
int				cachewidth;
pixel_t			*d_viewbuffer;
short			*d_pzbuffer;
unsigned int	d_zrowbytes;
unsigned int	d_zwidth;


#endif	// !id386

byte	r_notexture_buffer[1024];

/*
==================
R_InitTextures
==================
*/
void	R_InitTextures (void)
{
	int		x,y, m;
	byte	*dest;
	
// create a simple checkerboard texture for the default
	r_notexture_mip = (image_t *)&r_notexture_buffer;
	
	r_notexture_mip->width = r_notexture_mip->height = 16;
	r_notexture_mip->pixels[0] = &r_notexture_buffer[sizeof(image_t)];
	r_notexture_mip->pixels[1] = r_notexture_mip->pixels[0] + 16*16;
	r_notexture_mip->pixels[2] = r_notexture_mip->pixels[1] + 8*8;
	r_notexture_mip->pixels[3] = r_notexture_mip->pixels[2] + 4*4;
	
	for (m=0 ; m<4 ; m++)
	{
		dest = r_notexture_mip->pixels[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;
			}
	}	
}


/*
================
R_InitTurb
================
*/
void R_InitTurb (void)
{
	int		i;
	
	for (i=0 ; i<1280 ; i++)
	{
		sintable[i] = AMP + sin(i*3.14159*2/CYCLE)*AMP;
		intsintable[i] = AMP2 + sin(i*3.14159*2/CYCLE)*AMP2;	// AMP2, not 20
		blanktable[i] = 0;			//PGM
	}
}

void R_ImageList_f( void );

void R_Register (void)
{
	sw_aliasstats = ri.Cvar_Get ("sw_polymodelstats", "0", 0);
	sw_allow_modex = ri.Cvar_Get( "sw_allow_modex", "1", CVAR_ARCHIVE );
	sw_clearcolor = ri.Cvar_Get ("sw_clearcolor", "2", 0);
	sw_drawflat = ri.Cvar_Get ("sw_drawflat", "0", 0);
	sw_draworder = ri.Cvar_Get ("sw_draworder", "0", 0);
	sw_maxedges = ri.Cvar_Get ("sw_maxedges", STRINGER(MAXSTACKSURFACES), 0);
	sw_maxsurfs = ri.Cvar_Get ("sw_maxsurfs", "0", 0);
	sw_mipcap = ri.Cvar_Get ("sw_mipcap", "0", 0);
	sw_mipscale = ri.Cvar_Get ("sw_mipscale", "1", 0);
	sw_reportedgeout = ri.Cvar_Get ("sw_reportedgeout", "0", 0);
	sw_reportsurfout = ri.Cvar_Get ("sw_reportsurfout", "0", 0);
	sw_stipplealpha = ri.Cvar_Get( "sw_stipplealpha", "0", CVAR_ARCHIVE );
	sw_surfcacheoverride = ri.Cvar_Get ("sw_surfcacheoverride", "0", 0);
	sw_waterwarp = ri.Cvar_Get ("sw_waterwarp", "1", 0);
	sw_mode = ri.Cvar_Get( "sw_mode", "0", CVAR_ARCHIVE );

	r_lefthand = ri.Cvar_Get( "hand", "0", CVAR_USERINFO | CVAR_ARCHIVE );
	r_speeds = ri.Cvar_Get ("r_speeds", "0", 0);
	r_fullbright = ri.Cvar_Get ("r_fullbright", "0", 0);
	r_drawentities = ri.Cvar_Get ("r_drawentities", "1", 0);
	r_drawworld = ri.Cvar_Get ("r_drawworld", "1", 0);
	r_dspeeds = ri.Cvar_Get ("r_dspeeds", "0", 0);
	r_lightlevel = ri.Cvar_Get ("r_lightlevel", "0", 0);
	r_lerpmodels = ri.Cvar_Get( "r_lerpmodels", "1", 0 );
	r_novis = ri.Cvar_Get( "r_novis", "0", 0 );

	vid_fullscreen = ri.Cvar_Get( "vid_fullscreen", "0", CVAR_ARCHIVE );
	vid_gamma = ri.Cvar_Get( "vid_gamma", "1.0", CVAR_ARCHIVE );

	ri.Cmd_AddCommand ("modellist", Mod_Modellist_f);
	ri.Cmd_AddCommand( "screenshot", R_ScreenShot_f );
	ri.Cmd_AddCommand( "imagelist", R_ImageList_f );

	sw_mode->modified = true; // force us to do mode specific stuff later
	vid_gamma->modified = true; // force us to rebuild the gamma table later

//PGM
	sw_lockpvs = ri.Cvar_Get ("sw_lockpvs", "0", 0);
//PGM
}

void R_UnRegister (void)
{
	ri.Cmd_RemoveCommand( "screenshot" );
	ri.Cmd_RemoveCommand ("modellist");
	ri.Cmd_RemoveCommand( "imagelist" );
}

/*
===============
R_Init
===============
*/
qboolean R_Init( void *hInstance, void *wndProc )
{
	R_InitImages ();
	Mod_Init ();
	Draw_InitLocal ();
	R_InitTextures ();

	R_InitTurb ();

	view_clipplanes[0].leftedge = true;
	view_clipplanes[1].rightedge = true;
	view_clipplanes[1].leftedge = view_clipplanes[2].leftedge =
			view_clipplanes[3].leftedge = false;
	view_clipplanes[0].rightedge = view_clipplanes[2].rightedge =
			view_clipplanes[3].rightedge = false;

	r_refdef.xOrigin = XCENTERING;
	r_refdef.yOrigin = YCENTERING;

// TODO: collect 386-specific code in one place
#if	id386
	Sys_MakeCodeWriteable ((long)R_EdgeCodeStart,
					     (long)R_EdgeCodeEnd - (long)R_EdgeCodeStart);
	Sys_SetFPCW ();		// get bit masks for FPCW	(FIXME: is this id386?)
#endif	// id386

	r_aliasuvscale = 1.0;

	R_Register ();
	Draw_GetPalette ();
	SWimp_Init( hInstance, wndProc );

	// create the window
	R_BeginFrame( 0 );

	ri.Con_Printf (PRINT_ALL, "ref_soft version: "REF_VERSION"\n");

	return true;
}

/*
===============
R_Shutdown
===============
*/
void R_Shutdown (void)
{
	// free z buffer
	if (d_pzbuffer)
	{
		free (d_pzbuffer);
		d_pzbuffer = NULL;
	}
	// free surface cache
	if (sc_base)
	{
		D_FlushCaches ();
		free (sc_base);
		sc_base = NULL;
	}

	// free colormap
	if (vid.colormap)
	{
		free (vid.colormap);
		vid.colormap = NULL;
	}
	R_UnRegister ();
	Mod_FreeAll ();
	R_ShutdownImages ();

	SWimp_Shutdown();
}

/*
===============
R_NewMap
===============
*/
void R_NewMap (void)
{
	r_viewcluster = -1;

	r_cnumsurfs = sw_maxsurfs->value;

	if (r_cnumsurfs <= MINSURFACES)
		r_cnumsurfs = MINSURFACES;

	if (r_cnumsurfs > NUMSTACKSURFACES)
	{
		surfaces = malloc (r_cnumsurfs * sizeof(surf_t));
		surface_p = surfaces;
		surf_max = &surfaces[r_cnumsurfs];
		r_surfsonstack = false;
	// surface 0 doesn't really exist; it's just a dummy because index 0
	// is used to indicate no edge attached to surface
		surfaces--;
		R_SurfacePatch ();
	}
	else
	{
		r_surfsonstack = true;
	}

	r_maxedgesseen = 0;
	r_maxsurfsseen = 0;

	r_numallocatededges = sw_maxedges->value;

	if (r_numallocatededges < MINEDGES)
		r_numallocatededges = MINEDGES;

	if (r_numallocatededges <= NUMSTACKEDGES)
	{
		auxedges = NULL;
	}
	else
	{
		auxedges = malloc (r_numallocatededges * sizeof(edge_t));
	}
}


/*
===============
R_MarkLeaves

Mark the leaves and nodes that are in the PVS for the current
cluster
===============
*/
void R_MarkLeaves (void)
{
	byte	*vis;
	mnode_t	*node;
	int		i;
	mleaf_t	*leaf;
	int		cluster;

	if (r_oldviewcluster == r_viewcluster && !r_novis->value && r_viewcluster != -1)
		return;
	
	// development aid to let you run around and see exactly where
	// the pvs ends
	if (sw_lockpvs->value)
		return;

	r_visframecount++;
	r_oldviewcluster = r_viewcluster;

	if (r_novis->value || r_viewcluster == -1 || !r_worldmodel->vis)
	{
		// mark everything
		for (i=0 ; i<r_worldmodel->numleafs ; i++)
			r_worldmodel->leafs[i].visframe = r_visframecount;
		for (i=0 ; i<r_worldmodel->numnodes ; i++)
			r_worldmodel->nodes[i].visframe = r_visframecount;
		return;
	}

	vis = Mod_ClusterPVS (r_viewcluster, r_worldmodel);
	
	for (i=0,leaf=r_worldmodel->leafs ; i<r_worldmodel->numleafs ; i++, leaf++)
	{
		cluster = leaf->cluster;
		if (cluster == -1)
			continue;
		if (vis[cluster>>3] & (1<<(cluster&7)))
		{
			node = (mnode_t *)leaf;
			do
			{
				if (node->visframe == r_visframecount)
					break;
				node->visframe = r_visframecount;
				node = node->parent;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品久久| 欧美精选午夜久久久乱码6080| 久久人人超碰精品| 激情文学综合网| 欧美极品xxx| 色综合久久久网| 午夜精品福利一区二区蜜股av| 欧美一区二区三区在线看| 九色综合狠狠综合久久| 久久亚洲免费视频| 99精品桃花视频在线观看| 亚洲激情校园春色| 欧美一区二区三区四区久久| 国产呦萝稀缺另类资源| 亚洲色图.com| 欧美狂野另类xxxxoooo| 国产呦精品一区二区三区网站| 中文字幕在线观看一区二区| 欧美综合天天夜夜久久| 麻豆91精品91久久久的内涵| 国产欧美一区二区精品秋霞影院| 成人av在线播放网站| 亚洲图片欧美视频| 久久综合视频网| 色哟哟国产精品| 久久精品国产网站| 亚洲天堂2016| 日韩精品中午字幕| 色偷偷88欧美精品久久久| 日韩av电影天堂| 国产精品久久久久婷婷| 91精品国产乱码| 波多野结衣亚洲| 日韩国产欧美在线播放| 国产精品美女一区二区三区| 欧美一区二区三级| 色先锋aa成人| 国产麻豆精品在线观看| 婷婷中文字幕一区三区| 国产精品丝袜91| 免费成人在线观看视频| 亚洲国产精品欧美一二99| 91精品国产综合久久福利软件| 成人一级片在线观看| 午夜视频在线观看一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美国产日韩亚洲一区| 欧美一区二区网站| 色婷婷综合激情| 国产999精品久久| 日韩高清不卡一区二区| 一区二区三区精品视频| 国产精品人成在线观看免费| 精品精品欲导航| 欧美另类久久久品| 99久久99久久久精品齐齐| 国产一区二区三区四| 日韩国产欧美在线观看| 夜夜嗨av一区二区三区网页| 成人免费视频在线观看| 国产欧美视频一区二区三区| 精品国产乱码久久久久久免费| 欧美老年两性高潮| 欧美日韩国产精选| 91丨porny丨在线| 丁香天五香天堂综合| 久久精品国产亚洲高清剧情介绍| 日韩电影一区二区三区| 午夜影视日本亚洲欧洲精品| 亚洲一区免费观看| 亚洲综合一区二区三区| 亚洲永久精品大片| 一二三四社区欧美黄| 亚洲女女做受ⅹxx高潮| 一区二区三区在线观看网站| 亚洲视频 欧洲视频| 中文字幕人成不卡一区| 亚洲欧美一区二区久久| 一区二区三区不卡在线观看| 亚洲在线中文字幕| 亚洲在线一区二区三区| 亚洲综合色丁香婷婷六月图片| 亚洲在线视频网站| 同产精品九九九| 美女视频网站黄色亚洲| 精品在线播放免费| 国产原创一区二区三区| 成人免费看视频| 99精品桃花视频在线观看| 色综合中文字幕国产 | 91网址在线看| 日本丰满少妇一区二区三区| 欧美天天综合网| 欧美日韩国产小视频| 日韩午夜小视频| 久久九九国产精品| 亚洲男同1069视频| 日韩精品亚洲专区| 国产福利视频一区二区三区| www.欧美.com| 欧美日韩国产天堂| 精品99999| 国产精品久久久久影院老司 | 午夜不卡在线视频| 精品亚洲欧美一区| 96av麻豆蜜桃一区二区| 欧美丰满少妇xxxxx高潮对白| 欧美va亚洲va香蕉在线| 国产精品网曝门| 亚洲成在人线在线播放| 狠狠色丁香九九婷婷综合五月| 丁香激情综合五月| 色欧美88888久久久久久影院| 911国产精品| 中文字幕在线观看不卡视频| 亚洲第一成人在线| 国产+成+人+亚洲欧洲自线| 91福利小视频| 久久久精品蜜桃| 亚洲第一综合色| 粉嫩一区二区三区在线看 | 欧美日韩国产电影| 久久久国产精华| 五月激情综合婷婷| 99视频一区二区| 欧美刺激午夜性久久久久久久| 国产精品免费视频一区| 久久狠狠亚洲综合| 欧美午夜一区二区三区免费大片| 2019国产精品| 日日夜夜免费精品| 91丝袜美腿高跟国产极品老师| 精品伦理精品一区| 亚洲第一搞黄网站| 99久久精品一区| 久久九九影视网| 麻豆国产一区二区| 欧美日本精品一区二区三区| 中文字幕一区二区三区在线播放| 蜜臂av日日欢夜夜爽一区| 99久久99精品久久久久久| 2欧美一区二区三区在线观看视频| 一区二区激情视频| 99久久99久久综合| 中文子幕无线码一区tr| 国内精品伊人久久久久av一坑 | 99精品久久久久久| 国产日韩在线不卡| 精品无码三级在线观看视频| 日韩一区二区三区四区| 亚洲国产精品综合小说图片区| 99久久精品99国产精品| 国产精品欧美一区喷水| 粉嫩一区二区三区性色av| 久久色.com| 国产原创一区二区三区| 精品国产麻豆免费人成网站| 日韩精品亚洲专区| 91精品国产麻豆| 日本一道高清亚洲日美韩| 777xxx欧美| 午夜精品福利一区二区三区av | 亚洲精品亚洲人成人网| 成人免费精品视频| 国产精品久久免费看| 成人18精品视频| **性色生活片久久毛片| 91在线小视频| 亚洲视频在线一区| 在线观看av不卡| 亚洲最大成人综合| 欧美日韩视频在线观看一区二区三区| 亚洲综合精品久久| 欧美卡1卡2卡| 捆绑调教一区二区三区| 久久久影视传媒| 成人av动漫网站| 亚洲精品日韩专区silk| 欧美伊人久久久久久久久影院| 亚洲在线视频免费观看| 欧美日韩国产免费| 蜜臀av一区二区三区| 欧美videos中文字幕| 国产精品一区二区三区网站| 中文在线资源观看网站视频免费不卡| 不卡一区在线观看| 一区二区三区四区在线播放 | 狠狠色伊人亚洲综合成人| 国产蜜臀97一区二区三区| 99久久久无码国产精品| 亚洲国产你懂的| 精品久久久久久久一区二区蜜臀| 国产成人无遮挡在线视频| 亚洲欧洲综合另类在线| 欧美浪妇xxxx高跟鞋交| 国产精品99久久久久久似苏梦涵| 亚洲欧美日韩国产综合| 日韩欧美国产三级电影视频| 国产91富婆露脸刺激对白| 亚洲午夜免费福利视频|