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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wl_scale.c

?? Wolf 3D official source code.
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
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	inc	di
asm	mov	al,ss:[mask3]
asm	out	dx,al						// set map mask register
asm	call ss:[linescale]				// scale the segment of pixels
asm	dec	di
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	scaletriple					// do the next segment


}


/*
=======================
=
= ScaleShape
=
= Draws a compiled shape at [scale] pixels high
=
= each vertical line of the shape has a pointer to segment data:
= 	end of segment pixel*2 (0 terminates line) used to patch rtl in scaler
= 	top of virtual line with segment in proper place
=	start of segment pixel*2, used to jsl into compiled scaler
=	<repeat>
=
= Setup for call
= --------------
= GC_MODE			read mode 1, write mode 2
= GC_COLORDONTCARE  set to 0, so all reads from video memory return 0xff
= GC_INDEX			pointing at GC_BITMASK
=
=======================
*/

static	long		longtemp;

void ScaleShape (int xcenter, int shapenum, unsigned height)
{
	t_compshape	_seg *shape;
	t_compscale _seg *comptable;
	unsigned	scale,srcx,stopx,tempx;
	int			t;
	unsigned	far *cmdptr;
	boolean		leftvis,rightvis;


	shape = PM_GetSpritePage (shapenum);

	scale = height>>3;						// low three bits are fractional
	if (!scale || scale>maxscale)
		return;								// too close or far away
	comptable = scaledirectory[scale];

	*(((unsigned *)&linescale)+1)=(unsigned)comptable;	// seg of far call
	*(((unsigned *)&linecmds)+1)=(unsigned)shape;		// seg of shape

//
// scale to the left (from pixel 31 to shape->leftpix)
//
	srcx = 32;
	slinex = xcenter;
	stopx = shape->leftpix;
	cmdptr = &shape->dataofs[31-stopx];

	while ( --srcx >=stopx && slinex>0)
	{
		(unsigned)linecmds = *cmdptr--;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		if (slinewidth == 1)
		{
			slinex--;
			if (slinex<viewwidth)
			{
				if (wallheight[slinex] >= height)
					continue;		// obscured by closer wall
				ScaleLine ();
			}
			continue;
		}

		//
		// handle multi pixel lines
		//
		if (slinex>viewwidth)
		{
			slinex -= slinewidth;
			slinewidth = viewwidth-slinex;
			if (slinewidth<1)
				continue;		// still off the right side
		}
		else
		{
			if (slinewidth>slinex)
				slinewidth = slinex;
			slinex -= slinewidth;
		}


		leftvis = (wallheight[slinex] < height);
		rightvis = (wallheight[slinex+slinewidth-1] < height);

		if (leftvis)
		{
			if (rightvis)
				ScaleLine ();
			else
			{
				while (wallheight[slinex+slinewidth-1] >= height)
					slinewidth--;
				ScaleLine ();
			}
		}
		else
		{
			if (!rightvis)
				continue;		// totally obscured

			while (wallheight[slinex] >= height)
			{
				slinex++;
				slinewidth--;
			}
			ScaleLine ();
			break;			// the rest of the shape is gone
		}
	}


//
// scale to the right
//
	slinex = xcenter;
	stopx = shape->rightpix;
	if (shape->leftpix<31)
	{
		srcx = 31;
		cmdptr = &shape->dataofs[32-shape->leftpix];
	}
	else
	{
		srcx = shape->leftpix-1;
		cmdptr = &shape->dataofs[0];
	}
	slinewidth = 0;

	while ( ++srcx <= stopx && (slinex+=slinewidth)<viewwidth)
	{
		(unsigned)linecmds = *cmdptr++;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		if (slinewidth == 1)
		{
			if (slinex>=0 && wallheight[slinex] < height)
			{
				ScaleLine ();
			}
			continue;
		}

		//
		// handle multi pixel lines
		//
		if (slinex<0)
		{
			if (slinewidth <= -slinex)
				continue;		// still off the left edge

			slinewidth += slinex;
			slinex = 0;
		}
		else
		{
			if (slinex + slinewidth > viewwidth)
				slinewidth = viewwidth-slinex;
		}


		leftvis = (wallheight[slinex] < height);
		rightvis = (wallheight[slinex+slinewidth-1] < height);

		if (leftvis)
		{
			if (rightvis)
			{
				ScaleLine ();
			}
			else
			{
				while (wallheight[slinex+slinewidth-1] >= height)
					slinewidth--;
				ScaleLine ();
				break;			// the rest of the shape is gone
			}
		}
		else
		{
			if (rightvis)
			{
				while (wallheight[slinex] >= height)
				{
					slinex++;
					slinewidth--;
				}
				ScaleLine ();
			}
			else
				continue;		// totally obscured
		}
	}
}



/*
=======================
=
= SimpleScaleShape
=
= NO CLIPPING, height in pixels
=
= Draws a compiled shape at [scale] pixels high
=
= each vertical line of the shape has a pointer to segment data:
= 	end of segment pixel*2 (0 terminates line) used to patch rtl in scaler
= 	top of virtual line with segment in proper place
=	start of segment pixel*2, used to jsl into compiled scaler
=	<repeat>
=
= Setup for call
= --------------
= GC_MODE			read mode 1, write mode 2
= GC_COLORDONTCARE  set to 0, so all reads from video memory return 0xff
= GC_INDEX			pointing at GC_BITMASK
=
=======================
*/

void SimpleScaleShape (int xcenter, int shapenum, unsigned height)
{
	t_compshape	_seg *shape;
	t_compscale _seg *comptable;
	unsigned	scale,srcx,stopx,tempx;
	int			t;
	unsigned	far *cmdptr;
	boolean		leftvis,rightvis;


	shape = PM_GetSpritePage (shapenum);

	scale = height>>1;
	comptable = scaledirectory[scale];

	*(((unsigned *)&linescale)+1)=(unsigned)comptable;	// seg of far call
	*(((unsigned *)&linecmds)+1)=(unsigned)shape;		// seg of shape

//
// scale to the left (from pixel 31 to shape->leftpix)
//
	srcx = 32;
	slinex = xcenter;
	stopx = shape->leftpix;
	cmdptr = &shape->dataofs[31-stopx];

	while ( --srcx >=stopx )
	{
		(unsigned)linecmds = *cmdptr--;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		slinex -= slinewidth;
		ScaleLine ();
	}


//
// scale to the right
//
	slinex = xcenter;
	stopx = shape->rightpix;
	if (shape->leftpix<31)
	{
		srcx = 31;
		cmdptr = &shape->dataofs[32-shape->leftpix];
	}
	else
	{
		srcx = shape->leftpix-1;
		cmdptr = &shape->dataofs[0];
	}
	slinewidth = 0;

	while ( ++srcx <= stopx )
	{
		(unsigned)linecmds = *cmdptr++;
		if ( !(slinewidth = comptable->width[srcx]) )
			continue;

		ScaleLine ();
		slinex+=slinewidth;
	}
}




//
// bit mask tables for drawing scaled strips up to eight pixels wide
//
// down here so the STUPID inline assembler doesn't get confused!
//


byte	mapmasks1[4][8] = {
{1 ,3 ,7 ,15,15,15,15,15},
{2 ,6 ,14,14,14,14,14,14},
{4 ,12,12,12,12,12,12,12},
{8 ,8 ,8 ,8 ,8 ,8 ,8 ,8} };

byte	mapmasks2[4][8] = {
{0 ,0 ,0 ,0 ,1 ,3 ,7 ,15},
{0 ,0 ,0 ,1 ,3 ,7 ,15,15},
{0 ,0 ,1 ,3 ,7 ,15,15,15},
{0 ,1 ,3 ,7 ,15,15,15,15} };

byte	mapmasks3[4][8] = {
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,0},
{0 ,0 ,0 ,0 ,0 ,0 ,0 ,1},
{0 ,0 ,0 ,0 ,0 ,0 ,1 ,3},
{0 ,0 ,0 ,0 ,0 ,1 ,3 ,7} };


unsigned	wordmasks[8][8] = {
{0x0080,0x00c0,0x00e0,0x00f0,0x00f8,0x00fc,0x00fe,0x00ff},
{0x0040,0x0060,0x0070,0x0078,0x007c,0x007e,0x007f,0x807f},
{0x0020,0x0030,0x0038,0x003c,0x003e,0x003f,0x803f,0xc03f},
{0x0010,0x0018,0x001c,0x001e,0x001f,0x801f,0xc01f,0xe01f},
{0x0008,0x000c,0x000e,0x000f,0x800f,0xc00f,0xe00f,0xf00f},
{0x0004,0x0006,0x0007,0x8007,0xc007,0xe007,0xf007,0xf807},
{0x0002,0x0003,0x8003,0xc003,0xe003,0xf003,0xf803,0xfc03},
{0x0001,0x8001,0xc001,0xe001,0xf001,0xf801,0xfc01,0xfe01} };

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区久久| 色妞www精品视频| 亚洲欧美视频在线观看| 91麻豆精品国产综合久久久久久 | 91小视频在线免费看| 日韩va亚洲va欧美va久久| 国产精品福利一区二区| 欧美电视剧在线看免费| 91成人免费在线| 懂色av一区二区在线播放| 秋霞影院一区二区| 国产麻豆欧美日韩一区| 亚洲午夜在线观看视频在线| 国产精品色哟哟网站| 欧美精品一区二区久久婷婷| 欧美日韩高清在线播放| 91猫先生在线| av网站一区二区三区| 国产激情一区二区三区四区| 麻豆91在线看| 奇米888四色在线精品| 亚洲一区二区三区四区在线| 亚洲精选一二三| 18成人在线观看| 国产精品伦一区| 国产欧美一二三区| 欧美精品一区二区三区高清aⅴ| 欧美一三区三区四区免费在线看| 91激情在线视频| 欧美性生交片4| 欧美午夜电影网| 日本韩国一区二区三区视频| 99这里只有精品| 成人动漫一区二区在线| 丁香婷婷综合五月| 国产91在线观看丝袜| 激情av综合网| 国产精品一二三四| 丁香六月综合激情| 丁香婷婷深情五月亚洲| 成人av在线看| 色天使久久综合网天天| 在线亚洲一区观看| 欧美福利电影网| 日韩色视频在线观看| 欧美一级专区免费大片| 日韩免费在线观看| 久久五月婷婷丁香社区| 国产亚洲欧美一级| 日韩理论电影院| 亚洲h动漫在线| 免费av网站大全久久| 国产一区二区在线看| 粉嫩av一区二区三区在线播放| 成人黄页在线观看| 在线观看av一区| 91精品国产丝袜白色高跟鞋| 精品国产sm最大网站| 中文成人av在线| 亚洲免费在线播放| 日本美女一区二区三区视频| 激情图区综合网| 9久草视频在线视频精品| 一本色道亚洲精品aⅴ| 91精品国产综合久久久久久久| 日韩精品在线一区二区| 日本一区二区免费在线观看视频| 亚洲欧美综合网| 日日夜夜免费精品| 国产成人综合精品三级| 日本精品视频一区二区| 日韩精品在线一区| 亚洲色图视频免费播放| 日韩精品亚洲专区| 成人毛片在线观看| 欧美喷潮久久久xxxxx| 国产无一区二区| 亚洲成av人片一区二区梦乃| 精彩视频一区二区三区| 91啪在线观看| 日韩欧美精品在线视频| 亚洲男人电影天堂| 久久国产欧美日韩精品| 日本国产一区二区| 国产亚洲va综合人人澡精品| 亚洲尤物视频在线| 国产黄人亚洲片| 欧美丰满少妇xxxbbb| 国产精品三级av| 麻豆成人免费电影| 91国偷自产一区二区开放时间| 欧美电影免费提供在线观看| 一区二区三区四区av| 国产成人精品亚洲午夜麻豆| 7777精品伊人久久久大香线蕉 | 国产电影一区二区三区| 欧美日本一区二区三区四区 | 亚洲电影中文字幕在线观看| 国产成人免费视| 91麻豆精品91久久久久同性| 中文字幕亚洲区| 老色鬼精品视频在线观看播放| 91视频com| 国产精品婷婷午夜在线观看| 美国精品在线观看| 欧美最猛黑人xxxxx猛交| 国产精品久久久久国产精品日日| 开心九九激情九九欧美日韩精美视频电影 | 91麻豆精品国产91久久久久久| 1000部国产精品成人观看| 韩国女主播成人在线| 欧美欧美欧美欧美| 亚洲亚洲精品在线观看| 91啪亚洲精品| 国产精品日日摸夜夜摸av| 九九九久久久精品| 91精品国产乱码久久蜜臀| 亚洲综合久久av| 在线观看亚洲成人| 悠悠色在线精品| 91视频精品在这里| 国产精品国产三级国产普通话三级 | 国产婷婷一区二区| 韩日av一区二区| 日韩精品一区二区三区蜜臀 | 日av在线不卡| 正在播放亚洲一区| 婷婷夜色潮精品综合在线| 欧美在线不卡视频| 亚洲一区二区在线播放相泽| 在线视频欧美区| 亚洲一区二区欧美| 欧美日韩免费观看一区二区三区| 亚洲一区二区视频在线| 欧美国产精品劲爆| 高清国产午夜精品久久久久久| 日本一区二区三区高清不卡| 成人性视频网站| 一区在线播放视频| 在线观看www91| 天天操天天综合网| 91精品国产麻豆| 激情小说欧美图片| 国产精品三级电影| 色狠狠av一区二区三区| 天天综合日日夜夜精品| 日韩欧美在线观看一区二区三区| 免费成人结看片| 久久男人中文字幕资源站| 成人在线视频一区| 亚洲欧美另类综合偷拍| 欧美亚洲综合久久| 蜜臀va亚洲va欧美va天堂 | 国产精品美女久久福利网站| 97久久人人超碰| 亚洲在线观看免费| 欧美电视剧在线看免费| 成人黄动漫网站免费app| 一区二区三区精品| 欧美一区二区久久| 成人精品免费视频| 亚洲综合色噜噜狠狠| 日韩你懂的在线观看| 成人国产免费视频| 无码av免费一区二区三区试看| 日韩女优视频免费观看| 成人av动漫网站| 丝袜亚洲精品中文字幕一区| 久久精品视频免费观看| 欧洲一区二区三区在线| 狠狠色丁香婷综合久久| 一区二区三区免费| 欧美tickling网站挠脚心| 成人av网在线| 日本不卡不码高清免费观看| 国产精品美女视频| 91精品一区二区三区久久久久久 | 欧美一区二区三区在线观看| 粉嫩aⅴ一区二区三区四区| 亚洲成av人**亚洲成av**| 久久久亚洲高清| 欧美日韩黄色影视| 国产乱国产乱300精品| 亚洲成在线观看| 亚洲国产精华液网站w| 538prom精品视频线放| 99在线精品观看| 久久99日本精品| 性做久久久久久免费观看欧美| 久久精品水蜜桃av综合天堂| 欧美性猛交xxxx乱大交退制版| 国产a视频精品免费观看| 免费美女久久99| 尤物av一区二区| 中文一区一区三区高中清不卡| 欧美二区在线观看| av日韩在线网站| 国产99久久久久久免费看农村| 日本vs亚洲vs韩国一区三区 | 欧美国产成人精品|