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

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

?? r_main.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
?? 第 1 頁 / 共 3 頁
字號:
	for (i=0 ; i<256 ; i++, in+=4, out+=4)
	{
		for (j=0 ; j<3 ; j++)
		{
			v = premult[j] + one_minus_alpha * in[j];
			if (v > 255)
				v = 255;
			out[j] = v;
		}
		out[3] = 255;
	}

	R_GammaCorrectAndSetPalette( ( const unsigned char * ) palette[0] );
//	SWimp_SetPalette( palette[0] );
}

//=======================================================================

void R_SetLightLevel (void)
{
	vec3_t		light;

	if ((r_newrefdef.rdflags & RDF_NOWORLDMODEL) || (!r_drawentities->value) || (!currententity))
	{
		r_lightlevel->value = 150.0;
		return;
	}

	// save off light value for server to look at (BIG HACK!)
	R_LightPoint (r_newrefdef.vieworg, light);
	r_lightlevel->value = 150.0 * light[0];
}


/*
@@@@@@@@@@@@@@@@
R_RenderFrame

@@@@@@@@@@@@@@@@
*/
void R_RenderFrame (refdef_t *fd)
{
	r_newrefdef = *fd;

	if (!r_worldmodel && !( r_newrefdef.rdflags & RDF_NOWORLDMODEL ) )
		ri.Sys_Error (ERR_FATAL,"R_RenderView: NULL worldmodel");

	VectorCopy (fd->vieworg, r_refdef.vieworg);
	VectorCopy (fd->viewangles, r_refdef.viewangles);

	if (r_speeds->value || r_dspeeds->value)
		r_time1 = Sys_Milliseconds ();

	R_SetupFrame ();

	R_MarkLeaves ();	// done here so we know if we're in water

	R_PushDlights (r_worldmodel);

	R_EdgeDrawing ();

	if (r_dspeeds->value)
	{
		se_time2 = Sys_Milliseconds ();
		de_time1 = se_time2;
	}

	R_DrawEntitiesOnList ();

	if (r_dspeeds->value)
	{
		de_time2 = Sys_Milliseconds ();
		dp_time1 = Sys_Milliseconds ();
	}

	R_DrawParticles ();

	if (r_dspeeds->value)
		dp_time2 = Sys_Milliseconds ();

	R_DrawAlphaSurfaces();

	R_SetLightLevel ();

	if (r_dowarp)
		D_WarpScreen ();

	if (r_dspeeds->value)
		da_time1 = Sys_Milliseconds ();

	if (r_dspeeds->value)
		da_time2 = Sys_Milliseconds ();

	R_CalcPalette ();

	if (sw_aliasstats->value)
		R_PrintAliasStats ();
		
	if (r_speeds->value)
		R_PrintTimes ();

	if (r_dspeeds->value)
		R_PrintDSpeeds ();

	if (sw_reportsurfout->value && r_outofsurfaces)
		ri.Con_Printf (PRINT_ALL,"Short %d surfaces\n", r_outofsurfaces);

	if (sw_reportedgeout->value && r_outofedges)
		ri.Con_Printf (PRINT_ALL,"Short roughly %d edges\n", r_outofedges * 2 / 3);
}

/*
** R_InitGraphics
*/
void R_InitGraphics( int width, int height )
{
	vid.width  = width;
	vid.height = height;

	// 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;
	}

	d_pzbuffer = malloc(vid.width*vid.height*2);

	R_InitCaches ();

	R_GammaCorrectAndSetPalette( ( const unsigned char *) d_8to24table );
}

/*
** R_BeginFrame
*/
void R_BeginFrame( float camera_separation )
{
	extern void Draw_BuildGammaTable( void );

	/*
	** rebuild the gamma correction palette if necessary
	*/
	if ( vid_gamma->modified )
	{
		Draw_BuildGammaTable();
		R_GammaCorrectAndSetPalette( ( const unsigned char * ) d_8to24table );

		vid_gamma->modified = false;
	}

	while ( sw_mode->modified || vid_fullscreen->modified )
	{
		rserr_t err;

		/*
		** if this returns rserr_invalid_fullscreen then it set the mode but not as a
		** fullscreen mode, e.g. 320x200 on a system that doesn't support that res
		*/
		if ( ( err = SWimp_SetMode( &vid.width, &vid.height, sw_mode->value, vid_fullscreen->value ) ) == rserr_ok )
		{
			R_InitGraphics( vid.width, vid.height );

			sw_state.prev_mode = sw_mode->value;
			vid_fullscreen->modified = false;
			sw_mode->modified = false;
		}
		else
		{
			if ( err == rserr_invalid_mode )
			{
				ri.Cvar_SetValue( "sw_mode", sw_state.prev_mode );
				ri.Con_Printf( PRINT_ALL, "ref_soft::R_BeginFrame() - could not set mode\n" );
			}
			else if ( err == rserr_invalid_fullscreen )
			{
				R_InitGraphics( vid.width, vid.height );

				ri.Cvar_SetValue( "vid_fullscreen", 0);
				ri.Con_Printf( PRINT_ALL, "ref_soft::R_BeginFrame() - fullscreen unavailable in this mode\n" );
				sw_state.prev_mode = sw_mode->value;
//				vid_fullscreen->modified = false;
//				sw_mode->modified = false;
			}
			else
			{
				ri.Sys_Error( ERR_FATAL, "ref_soft::R_BeginFrame() - catastrophic mode change failure\n" );
			}
		}
	}
}

/*
** R_GammaCorrectAndSetPalette
*/
void R_GammaCorrectAndSetPalette( const unsigned char *palette )
{
	int i;

	for ( i = 0; i < 256; i++ )
	{
		sw_state.currentpalette[i*4+0] = sw_state.gammatable[palette[i*4+0]];
		sw_state.currentpalette[i*4+1] = sw_state.gammatable[palette[i*4+1]];
		sw_state.currentpalette[i*4+2] = sw_state.gammatable[palette[i*4+2]];
	}

	SWimp_SetPalette( sw_state.currentpalette );
}

/*
** R_CinematicSetPalette
*/
void R_CinematicSetPalette( const unsigned char *palette )
{
	byte palette32[1024];
	int		i, j, w;
	int		*d;

	// clear screen to black to avoid any palette flash
	w = abs(vid.rowbytes)>>2;	// stupid negative pitch win32 stuff...
	for (i=0 ; i<vid.height ; i++, d+=w)
	{
		d = (int *)(vid.buffer + i*vid.rowbytes);
		for (j=0 ; j<w ; j++)
			d[j] = 0;
	}
	// flush it to the screen
	SWimp_EndFrame ();

	if ( palette )
	{
		for ( i = 0; i < 256; i++ )
		{
			palette32[i*4+0] = palette[i*3+0];
			palette32[i*4+1] = palette[i*3+1];
			palette32[i*4+2] = palette[i*3+2];
			palette32[i*4+3] = 0xFF;
		}

		R_GammaCorrectAndSetPalette( palette32 );
	}
	else
	{
		R_GammaCorrectAndSetPalette( ( const unsigned char * ) d_8to24table );
	}
}

/*
================
Draw_BuildGammaTable
================
*/
void Draw_BuildGammaTable (void)
{
	int		i, inf;
	float	g;

	g = vid_gamma->value;

	if (g == 1.0)
	{
		for (i=0 ; i<256 ; i++)
			sw_state.gammatable[i] = i;
		return;
	}
	
	for (i=0 ; i<256 ; i++)
	{
		inf = 255 * pow ( (i+0.5)/255.5 , g ) + 0.5;
		if (inf < 0)
			inf = 0;
		if (inf > 255)
			inf = 255;
		sw_state.gammatable[i] = inf;
	}
}

/*
** R_DrawBeam
*/
void R_DrawBeam( entity_t *e )
{
#define NUM_BEAM_SEGS 6

	int	i;

	vec3_t perpvec;
	vec3_t direction, normalized_direction;
	vec3_t start_points[NUM_BEAM_SEGS], end_points[NUM_BEAM_SEGS];
	vec3_t oldorigin, origin;

	oldorigin[0] = e->oldorigin[0];
	oldorigin[1] = e->oldorigin[1];
	oldorigin[2] = e->oldorigin[2];

	origin[0] = e->origin[0];
	origin[1] = e->origin[1];
	origin[2] = e->origin[2];

	normalized_direction[0] = direction[0] = oldorigin[0] - origin[0];
	normalized_direction[1] = direction[1] = oldorigin[1] - origin[1];
	normalized_direction[2] = direction[2] = oldorigin[2] - origin[2];

	if ( VectorNormalize( normalized_direction ) == 0 )
		return;

	PerpendicularVector( perpvec, normalized_direction );
	VectorScale( perpvec, e->frame / 2, perpvec );

	for ( i = 0; i < NUM_BEAM_SEGS; i++ )
	{
		RotatePointAroundVector( start_points[i], normalized_direction, perpvec, (360.0/NUM_BEAM_SEGS)*i );
		VectorAdd( start_points[i], origin, start_points[i] );
		VectorAdd( start_points[i], direction, end_points[i] );
	}

	for ( i = 0; i < NUM_BEAM_SEGS; i++ )
	{
		R_IMFlatShadedQuad( start_points[i],
		                    end_points[i],
							end_points[(i+1)%NUM_BEAM_SEGS],
							start_points[(i+1)%NUM_BEAM_SEGS],
							e->skinnum & 0xFF,
							e->alpha );
	}
}


//===================================================================

/*
============
R_SetSky
============
*/
// 3dstudio environment map names
char	*suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
int	r_skysideimage[6] = {5, 2, 4, 1, 0, 3};
extern	mtexinfo_t		r_skytexinfo[6];
void R_SetSky (char *name, float rotate, vec3_t axis)
{
	int		i;
	char	pathname[MAX_QPATH];

	strncpy (skyname, name, sizeof(skyname)-1);
	skyrotate = rotate;
	VectorCopy (axis, skyaxis);

	for (i=0 ; i<6 ; i++)
	{
		Com_sprintf (pathname, sizeof(pathname), "env/%s%s.pcx", skyname, suf[r_skysideimage[i]]);
		r_skytexinfo[i].image = R_FindImage (pathname, it_sky);
	}
}


/*
===============
Draw_GetPalette
===============
*/
void Draw_GetPalette (void)
{
	byte	*pal, *out;
	int		i;
	int		r, g, b;

	// get the palette and colormap
	LoadPCX ("pics/colormap.pcx", &vid.colormap, &pal, NULL, NULL);
	if (!vid.colormap)
		ri.Sys_Error (ERR_FATAL, "Couldn't load pics/colormap.pcx");
	vid.alphamap = vid.colormap + 64*256;

	out = (byte *)d_8to24table;
	for (i=0 ; i<256 ; i++, out+=4)
	{
		r = pal[i*3+0];
		g = pal[i*3+1];
		b = pal[i*3+2];

        out[0] = r;
        out[1] = g;
        out[2] = b;
	}

	free (pal);
}

struct image_s *R_RegisterSkin (char *name);

/*
@@@@@@@@@@@@@@@@@@@@@
GetRefAPI

@@@@@@@@@@@@@@@@@@@@@
*/
refexport_t GetRefAPI (refimport_t rimp)
{
	refexport_t	re;

	ri = rimp;

	re.api_version = API_VERSION;

	re.BeginRegistration = R_BeginRegistration;
    re.RegisterModel = R_RegisterModel;
    re.RegisterSkin = R_RegisterSkin;
	re.RegisterPic = Draw_FindPic;
	re.SetSky = R_SetSky;
	re.EndRegistration = R_EndRegistration;

	re.RenderFrame = R_RenderFrame;

	re.DrawGetPicSize = Draw_GetPicSize;
	re.DrawPic = Draw_Pic;
	re.DrawStretchPic = Draw_StretchPic;
	re.DrawChar = Draw_Char;
	re.DrawTileClear = Draw_TileClear;
	re.DrawFill = Draw_Fill;
	re.DrawFadeScreen= Draw_FadeScreen;

	re.DrawStretchRaw = Draw_StretchRaw;

	re.Init = R_Init;
	re.Shutdown = R_Shutdown;

	re.CinematicSetPalette = R_CinematicSetPalette;
	re.BeginFrame = R_BeginFrame;
	re.EndFrame = SWimp_EndFrame;

	re.AppActivate = SWimp_AppActivate;

	Swap_Init ();

	return re;
}

#ifndef REF_HARD_LINKED
// this is only here so the functions in q_shared.c and q_shwin.c can link
void Sys_Error (char *error, ...)
{
	va_list		argptr;
	char		text[1024];

	va_start (argptr, error);
	vsprintf (text, error, argptr);
	va_end (argptr);

	ri.Sys_Error (ERR_FATAL, "%s", text);
}

void Com_Printf (char *fmt, ...)
{
	va_list		argptr;
	char		text[1024];

	va_start (argptr, fmt);
	vsprintf (text, fmt, argptr);
	va_end (argptr);

	ri.Con_Printf (PRINT_ALL, "%s", text);
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩一级| 波多野结衣中文字幕一区 | 成人激情午夜影院| 欧美精品xxxxbbbb| 亚洲人一二三区| 国内精品久久久久影院色 | 日韩天堂在线观看| 夜夜嗨av一区二区三区网页 | 亚洲欧洲综合另类| 粉嫩av一区二区三区在线播放| 欧美精品乱码久久久久久按摩| 亚洲人成在线播放网站岛国| 国产一区不卡视频| 欧美成人综合网站| 天堂在线一区二区| 欧美影片第一页| 一区二区三区在线视频观看58| caoporn国产一区二区| 欧美精品一区二区三区在线播放 | 国产一区在线观看麻豆| 日韩视频免费观看高清完整版在线观看 | 国产精品蜜臀在线观看| 国产乱子轮精品视频| 欧美一卡在线观看| 免费成人小视频| 欧美成人免费网站| 激情五月播播久久久精品| 日韩精品中午字幕| 国产一区二区精品在线观看| 26uuu亚洲综合色| 国产精品一区在线| 国产精品视频免费看| 波多野结衣91| 亚洲人成网站色在线观看| 一本色道久久综合亚洲91| 亚洲免费高清视频在线| 欧美三片在线视频观看| 日韩高清一区在线| 欧美大片日本大片免费观看| 精品一区二区三区免费毛片爱 | 色偷偷88欧美精品久久久| 亚洲精品综合在线| 欧美日韩亚洲综合在线| 免费欧美在线视频| 国产亚洲一本大道中文在线| 丁香激情综合国产| 一区二区成人在线| 欧美精品自拍偷拍| 国模娜娜一区二区三区| 国产精品免费久久| 欧美性猛片xxxx免费看久爱| 日韩一区欧美二区| 久久久午夜精品| 色婷婷久久一区二区三区麻豆| 午夜精品免费在线观看| 2021中文字幕一区亚洲| 91一区二区三区在线观看| 亚洲国产成人精品视频| 精品国偷自产国产一区| 99re这里只有精品视频首页| 午夜av电影一区| 亚洲国产激情av| 欧美日本国产视频| 丰满白嫩尤物一区二区| 午夜精品久久久久久久久久| 国产欧美综合在线| 欧美日韩亚洲综合| 成人免费毛片片v| 日韩和的一区二区| 国产日韩精品一区二区浪潮av| 色综合咪咪久久| 国产一区二区在线免费观看| 一区二区成人在线| 中文字幕 久热精品 视频在线| 欧美精选午夜久久久乱码6080| 福利电影一区二区| 日日夜夜一区二区| 亚洲欧美另类综合偷拍| 久久这里只有精品6| 欧美性生交片4| 成人一区二区三区在线观看| 首页欧美精品中文字幕| 久久久精品人体av艺术| 欧美美女激情18p| 91色porny| 福利一区二区在线观看| 狠狠色狠狠色综合系列| 日韩二区三区四区| 亚洲一区在线播放| 亚洲男人电影天堂| 中文字幕在线播放不卡一区| 精品国产乱码久久久久久1区2区 | 青青草视频一区| 亚洲综合999| 最新日韩av在线| 国产精品免费视频观看| 久久精品一区二区三区不卡| 欧美一区二区高清| 在线成人免费视频| 欧美性高清videossexo| 色综合天天狠狠| 一本色道a无线码一区v| 91麻豆免费在线观看| 91在线观看地址| 99精品视频一区二区| 成人的网站免费观看| 成人午夜在线免费| av在线播放成人| 96av麻豆蜜桃一区二区| 成人h动漫精品一区二| 国产不卡高清在线观看视频| 国产自产视频一区二区三区| 精品夜夜嗨av一区二区三区| 久久草av在线| 精品一区二区免费| 国产很黄免费观看久久| 国产在线一区二区综合免费视频| 韩国三级在线一区| 国产成人小视频| 成人aa视频在线观看| 91猫先生在线| 欧美精品18+| 日韩免费观看2025年上映的电影| 欧美mv日韩mv亚洲| 国产日本亚洲高清| 综合久久久久综合| 亚洲成av人影院| 久久国产剧场电影| 成人短视频下载| 欧美网站一区二区| 欧美xxxxx裸体时装秀| 日本一区二区三级电影在线观看| 亚洲色图色小说| 日韩二区三区四区| 国产盗摄一区二区| 在线观看欧美精品| 日韩精品中文字幕在线一区| 久久久久国产一区二区三区四区| 中文字幕一区二区在线播放| 亚洲综合自拍偷拍| 国内精品写真在线观看| 91蜜桃免费观看视频| 欧美一区二视频| 中文在线资源观看网站视频免费不卡| 亚洲天堂2014| 另类小说视频一区二区| 成人av片在线观看| 欧美美女直播网站| 国产精品久久久久影院老司| 首页国产欧美久久| 成人精品国产一区二区4080| 91 com成人网| 亚洲色图一区二区三区| 精品亚洲免费视频| 欧美丝袜自拍制服另类| 国产午夜精品久久久久久久| 天天av天天翘天天综合网| 丁香天五香天堂综合| 欧美精品第1页| 亚洲欧美另类图片小说| 狠狠色丁香九九婷婷综合五月| 色视频欧美一区二区三区| 亚洲精品一区在线观看| 午夜欧美2019年伦理| 91欧美一区二区| 久久五月婷婷丁香社区| 日韩av电影一区| 色视频成人在线观看免| 亚洲国产精品二十页| 久久se精品一区精品二区| 欧美写真视频网站| 亚洲天堂2014| a亚洲天堂av| 欧美激情一区在线| 国产精品影视在线观看| 日韩一区二区三区在线| 五月婷婷色综合| 欧美在线看片a免费观看| 国产精品亲子乱子伦xxxx裸| 国内精品免费**视频| 日韩精品自拍偷拍| 捆绑调教美女网站视频一区| 在线91免费看| 亚洲成av人片在线| 欧美视频一区二区三区在线观看| 18成人在线视频| 白白色 亚洲乱淫| 欧美激情自拍偷拍| 丁香另类激情小说| 国产天堂亚洲国产碰碰| 国产麻豆欧美日韩一区| 久久九九影视网| 国产美女av一区二区三区| 久久超碰97人人做人人爱| 91免费在线视频观看| 久久夜色精品国产噜噜av| 奇米精品一区二区三区四区 | 亚洲妇熟xx妇色黄| 欧美日韩美女一区二区| 亚洲图片有声小说|