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

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

?? wl_scale.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號:
// WL_SCALE.C

#include "WL_DEF.H"
#pragma hdrstop

#define OP_RETF	0xcb

/*
=============================================================================

						  GLOBALS

=============================================================================
*/

t_compscale _seg *scaledirectory[MAXSCALEHEIGHT+1];
long			fullscalefarcall[MAXSCALEHEIGHT+1];

int			maxscale,maxscaleshl2;

boolean	insetupscaling;

/*
=============================================================================

						  LOCALS

=============================================================================
*/

t_compscale 	_seg *work;
unsigned BuildCompScale (int height, memptr *finalspot);

int			stepbytwo;

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

/*
==============
=
= BadScale
=
==============
*/

void far BadScale (void)
{
	Quit ("BadScale called!");
}


/*
==========================
=
= SetupScaling
=
==========================
*/

void SetupScaling (int maxscaleheight)
{
	int		i,x,y;
	byte	far *dest;

	insetupscaling = true;

	maxscaleheight/=2;			// one scaler every two pixels

	maxscale = maxscaleheight-1;
	maxscaleshl2 = maxscale<<2;

//
// free up old scalers
//
	for (i=1;i<MAXSCALEHEIGHT;i++)
	{
		if (scaledirectory[i])
			MM_FreePtr (&(memptr)scaledirectory[i]);
		if (i>=stepbytwo)
			i += 2;
	}
	memset (scaledirectory,0,sizeof(scaledirectory));

	MM_SortMem ();

//
// build the compiled scalers
//
	stepbytwo = viewheight/2;	// save space by double stepping
	MM_GetPtr (&(memptr)work,20000);

	for (i=1;i<=maxscaleheight;i++)
	{
		BuildCompScale (i*2,&(memptr)scaledirectory[i]);
		if (i>=stepbytwo)
			i+= 2;
	}
	MM_FreePtr (&(memptr)work);

//
// compact memory and lock down scalers
//
	MM_SortMem ();
	for (i=1;i<=maxscaleheight;i++)
	{
		MM_SetLock (&(memptr)scaledirectory[i],true);
		fullscalefarcall[i] = (unsigned)scaledirectory[i];
		fullscalefarcall[i] <<=16;
		fullscalefarcall[i] += scaledirectory[i]->codeofs[0];
		if (i>=stepbytwo)
		{
			scaledirectory[i+1] = scaledirectory[i];
			fullscalefarcall[i+1] = fullscalefarcall[i];
			scaledirectory[i+2] = scaledirectory[i];
			fullscalefarcall[i+2] = fullscalefarcall[i];
			i+=2;
		}
	}
	scaledirectory[0] = scaledirectory[1];
	fullscalefarcall[0] = fullscalefarcall[1];

//
// check for oversize wall drawing
//
	for (i=maxscaleheight;i<MAXSCALEHEIGHT;i++)
		fullscalefarcall[i] = (long)BadScale;

	insetupscaling = false;
}

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

/*
========================
=
= BuildCompScale
=
= Builds a compiled scaler object that will scale a 64 tall object to
= the given height (centered vertically on the screen)
=
= height should be even
=
= Call with
= ---------
= DS:SI		Source for scale
= ES:DI		Dest for scale
=
= Calling the compiled scaler only destroys AL
=
========================
*/

unsigned BuildCompScale (int height, memptr *finalspot)
{
	byte		far *code;

	int			i;
	long		fix,step;
	unsigned	src,totalscaled,totalsize;
	int			startpix,endpix,toppix;


	step = ((long)height<<16) / 64;
	code = &work->code[0];
	toppix = (viewheight-height)/2;
	fix = 0;

	for (src=0;src<=64;src++)
	{
		startpix = fix>>16;
		fix += step;
		endpix = fix>>16;

		if (endpix>startpix)
			work->width[src] = endpix-startpix;
		else
			work->width[src] = 0;

//
// mark the start of the code
//
		work->codeofs[src] = FP_OFF(code);

//
// compile some code if the source pixel generates any screen pixels
//
		startpix+=toppix;
		endpix+=toppix;

		if (startpix == endpix || endpix < 0 || startpix >= viewheight || src == 64)
			continue;

	//
	// mov al,[si+src]
	//
		*code++ = 0x8a;
		*code++ = 0x44;
		*code++ = src;

		for (;startpix<endpix;startpix++)
		{
			if (startpix >= viewheight)
				break;						// off the bottom of the view area
			if (startpix < 0)
				continue;					// not into the view area

		//
		// mov [es:di+heightofs],al
		//
			*code++ = 0x26;
			*code++ = 0x88;
			*code++ = 0x85;
			*((unsigned far *)code)++ = startpix*SCREENBWIDE;
		}

	}

//
// retf
//
	*code++ = 0xcb;

	totalsize = FP_OFF(code);
	MM_GetPtr (finalspot,totalsize);
	_fmemcpy ((byte _seg *)(*finalspot),(byte _seg *)work,totalsize);

	return totalsize;
}


/*
=======================
=
= ScaleLine
=
= linescale should have the high word set to the segment of the scaler
=
=======================
*/

extern	int			slinex,slinewidth;
extern	unsigned	far *linecmds;
extern	long		linescale;
extern	unsigned	maskword;

byte	mask1,mask2,mask3;


void near ScaleLine (void)
{
asm	mov	cx,WORD PTR [linescale+2]
asm	mov	es,cx						// segment of scaler

asm	mov bp,WORD PTR [linecmds]
asm	mov	dx,SC_INDEX+1				// to set SC_MAPMASK

asm	mov	bx,[slinex]
asm	mov	di,bx
asm	shr	di,2						// X in bytes
asm	add	di,[bufferofs]
asm	and	bx,3
asm	shl	bx,3
asm	add	bx,[slinewidth]				// bx = (pixel*8+pixwidth)
asm	mov	al,BYTE [mapmasks3-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ds,WORD PTR [linecmds+2]
asm	or	al,al
asm	jz	notthreebyte				// scale across three bytes
asm	jmp	threebyte
notthreebyte:
asm	mov	al,BYTE PTR ss:[mapmasks2-1+bx]	// -1 because pixwidth of 1 is first
asm	or	al,al
asm	jnz	twobyte						// scale across two bytes

//
// one byte scaling
//
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	out	dx,al						// set map mask register

scalesingle:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	dl,[es:bx]					// save old value
asm	mov	BYTE PTR es:[bx],OP_RETF	// patch a RETF in
asm	mov	si,[ds:bp+4]				// table location of entry spot
asm	mov	ax,[es:si]
asm	mov	WORD PTR ss:[linescale],ax	// call here to start scaling
asm	mov	si,[ds:bp+2]				// corrected top of shape for this segment
asm	add	bp,6						// next segment list

asm	mov	ax,SCREENSEG
asm	mov	es,ax
asm	call ss:[linescale]				// scale the segment of pixels

asm	mov	es,cx						// segment of scaler
asm	mov	BYTE PTR es:[bx],dl			// unpatch the RETF
asm	jmp	scalesingle					// do the next segment


//
// done
//
linedone:
asm	mov	ax,ss
asm	mov	ds,ax
return;

//
// two byte scaling
//
twobyte:
asm	mov	ss:[mask2],al
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask1],al

scaledouble:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	cl,[es:bx]					// save old value
asm	mov	BYTE PTR es:[bx],OP_RETF	// patch a RETF in
asm	mov	si,[ds:bp+4]				// table location of entry spot
asm	mov	ax,[es:si]
asm	mov	WORD PTR ss:[linescale],ax	// call here to start scaling
asm	mov	si,[ds:bp+2]				// corrected top of shape for this segment
asm	add	bp,6						// next segment list

asm	mov	ax,SCREENSEG
asm	mov	es,ax
asm	mov	al,ss:[mask1]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	inc	di
asm	mov	al,ss:[mask2]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	dec	di

asm	mov	es,WORD PTR ss:[linescale+2] // segment of scaler
asm	mov	BYTE PTR es:[bx],cl			// unpatch the RETF
asm	jmp	scaledouble					// do the next segment


//
// three byte scaling
//
threebyte:
asm	mov	ss:[mask3],al
asm	mov	al,BYTE PTR ss:[mapmasks2-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask2],al
asm	mov	al,BYTE PTR ss:[mapmasks1-1+bx]	// -1 because pixwidth of 1 is first
asm	mov	ss:[mask1],al

scaletriple:

asm	mov	bx,[ds:bp]					// table location of rtl to patch
asm	or	bx,bx
asm	jz	linedone					// 0 signals end of segment list
asm	mov	bx,[es:bx]
asm	mov	cl,[es:bx]					// save old value
asm	mov	BYTE PTR es:[bx],OP_RETF	// patch a RETF in
asm	mov	si,[ds:bp+4]				// table location of entry spot

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91.xcao| 国产一区二区三区在线观看精品| 午夜视频久久久久久| 三级欧美在线一区| 国产福利一区在线观看| 色偷偷久久一区二区三区| 88在线观看91蜜桃国自产| 26uuu精品一区二区| 亚洲男人天堂av| 免费观看在线综合| www.99精品| 日韩亚洲欧美高清| 欧美精彩视频一区二区三区| 亚洲一区免费观看| 久久国产三级精品| 91蝌蚪国产九色| 日韩女优毛片在线| 亚洲欧洲国产专区| 麻豆精品一区二区av白丝在线| 成人一级片在线观看| 欧美日韩高清一区二区三区| 欧美国产日本视频| 日韩电影网1区2区| 成人av小说网| 亚洲精品在线观看视频| 亚洲激情第一区| 国产成人欧美日韩在线电影| 欧美精品一卡二卡| 国产精品污www在线观看| 首页综合国产亚洲丝袜| 国产不卡视频在线播放| 欧美日韩在线播放三区四区| 国产精品丝袜在线| 蜜臀av一区二区三区| 91麻豆精品一区二区三区| 欧美成人免费网站| 亚洲成人一区二区| av亚洲精华国产精华精华| 欧美一区二区视频在线观看2020| 亚洲色图在线播放| 狠狠狠色丁香婷婷综合激情| 欧美丰满少妇xxxbbb| 亚洲女人****多毛耸耸8| 精品一二线国产| 欧美欧美午夜aⅴ在线观看| 中文字幕一区二区在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 91精品国产综合久久小美女| 亚洲一区二区三区四区五区黄| av在线播放一区二区三区| 精品999在线播放| 免费看欧美美女黄的网站| 欧美亚洲国产怡红院影院| 亚洲欧洲国产专区| 国产精品一区二区在线播放 | 亚洲九九爱视频| 国产成人小视频| 久久久久国色av免费看影院| 精品一区二区三区香蕉蜜桃| 91麻豆精品久久久久蜜臀 | 欧美色精品天天在线观看视频| 国产精品毛片a∨一区二区三区| 加勒比av一区二区| 欧美一区在线视频| 天天做天天摸天天爽国产一区| 欧洲人成人精品| 一区二区三区四区激情| 色婷婷综合中文久久一本| 国产精品久久久久久久久久久免费看 | 成人蜜臀av电影| 国产欧美日韩精品a在线观看| 国产精品一色哟哟哟| 久久久亚洲精品一区二区三区 | 久久久综合视频| 国产剧情一区二区| 久久久国产精品午夜一区ai换脸| 国产麻豆一精品一av一免费 | 成人午夜私人影院| 亚洲国产成人一区二区三区| 丁香婷婷综合网| 国产日韩欧美不卡在线| 国产成人欧美日韩在线电影| 日本一区二区不卡视频| 成人午夜av影视| 亚洲视频在线一区二区| 91福利国产成人精品照片| 亚洲一区二区三区四区在线免费观看 | 精品国产制服丝袜高跟| 精品一区二区三区免费播放| 久久综合九色综合久久久精品综合| 狠狠色丁香婷婷综合久久片| 国产亚洲制服色| 粉嫩av一区二区三区| 国产精品美女久久久久aⅴ| 99re热视频精品| 一区二区三区视频在线观看| 欧美欧美欧美欧美| 精品无人码麻豆乱码1区2区 | www.激情成人| 伊人色综合久久天天人手人婷| 欧美视频日韩视频在线观看| 美女任你摸久久| 欧美高清在线一区| 91福利在线导航| 麻豆成人久久精品二区三区红 | 国产婷婷色一区二区三区| 国产麻豆精品在线| 亚洲日韩欧美一区二区在线| 欧美日韩免费不卡视频一区二区三区 | 日本道免费精品一区二区三区| 天天操天天色综合| 久久亚洲私人国产精品va媚药| 99免费精品视频| 日韩精品欧美精品| 久久久青草青青国产亚洲免观| 91免费看片在线观看| 肉肉av福利一精品导航| 久久久久久久久久久久电影| 91麻豆精品视频| 久久精品99久久久| 亚洲欧美影音先锋| 欧美一区二区三区在线看| 成人综合在线视频| 天天做天天摸天天爽国产一区 | 色哟哟欧美精品| 久久精品国产99| 一区二区高清免费观看影视大全| 欧美第一区第二区| 色狠狠综合天天综合综合| 久久精品国产免费| 亚洲精品免费看| 久久婷婷久久一区二区三区| 在线免费观看日本欧美| 国产精选一区二区三区| 亚洲国产精品一区二区www在线| 久久免费视频一区| 欧美日本高清视频在线观看| 成人av免费在线观看| 美脚の诱脚舐め脚责91| 亚洲卡通欧美制服中文| 久久久国产精品麻豆| 欧美综合欧美视频| 国产麻豆91精品| 奇米色一区二区| 亚洲国产日韩a在线播放性色| 久久久久9999亚洲精品| 欧美日韩国产美| 99r国产精品| 国产91精品免费| 激情五月婷婷综合| 天天综合网 天天综合色| 亚洲日本丝袜连裤袜办公室| 国产欧美综合色| 欧美电影免费观看完整版| 欧美在线影院一区二区| 成人精品国产一区二区4080| 久久 天天综合| 视频在线观看91| 91社区在线播放| 高清成人在线观看| 精品在线免费视频| 日韩av网站免费在线| 一区二区三区国产豹纹内裤在线| 中文字幕色av一区二区三区| 精品欧美黑人一区二区三区| 91精品国产91热久久久做人人| 色av成人天堂桃色av| 99久久久久久99| 不卡视频一二三四| 国产精品2024| 国产传媒欧美日韩成人| 韩日欧美一区二区三区| 看电影不卡的网站| 男人的j进女人的j一区| 五月天久久比比资源色| 亚洲国产综合91精品麻豆| 一区二区三区四区在线| 亚洲日本在线天堂| 亚洲人亚洲人成电影网站色| 国产精品的网站| 国产精品久久久久久久久久久免费看| 国产欧美日韩综合| 国产午夜精品一区二区三区嫩草 | av午夜精品一区二区三区| 国产成人午夜高潮毛片| 国产一区二区在线视频| 国产一区二区三区四区在线观看| 狠狠网亚洲精品| 国产91丝袜在线18| 成人一级片在线观看| 波多野结衣中文字幕一区二区三区| 成人一区在线看| 99re成人在线| 欧美色男人天堂| 欧美一级夜夜爽| 久久久久久99久久久精品网站| 中文字幕国产一区二区| 日韩毛片一二三区| 亚洲综合丝袜美腿| 日本中文字幕一区二区有限公司|