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

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

?? r_drawa.s

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? S
?? 第 1 頁 / 共 2 頁
字號:
//
// r_drawa.s
// x86 assembly-language edge clipping and emission code
//

#include "qasm.h"
#include "d_ifacea.h"

#if	id386

// !!! if these are changed, they must be changed in r_draw.c too !!!
#define FULLY_CLIPPED_CACHED	0x80000000
#define FRAMECOUNT_MASK			0x7FFFFFFF

	.data

Ld0:			.single		0.0
Ld1:			.single		0.0
Lstack:			.long		0
Lfp_near_clip:	.single		NEAR_CLIP
Lceilv0:		.long		0
Lv:				.long		0
Lu0:			.long		0
Lv0:			.long		0
Lzi0:			.long		0

	.text

//----------------------------------------------------------------------
// edge clipping code
//----------------------------------------------------------------------

#define pv0		4+12
#define pv1		8+12
#define clip	12+12

	.align 4
.globl C(R_ClipEdge)
C(R_ClipEdge):
	pushl	%esi				// preserve register variables
	pushl	%edi
	pushl	%ebx
	movl	%esp,Lstack			// for clearing the stack later

//	float		d0, d1, f;
//	mvertex_t	clipvert;

	movl	clip(%esp),%ebx
	movl	pv0(%esp),%esi
	movl	pv1(%esp),%edx

//	if (clip)
//	{
	testl	%ebx,%ebx
	jz		Lemit

//		do
//		{

Lcliploop:

//			d0 = DotProduct (pv0->position, clip->normal) - clip->dist;
//			d1 = DotProduct (pv1->position, clip->normal) - clip->dist;
	flds	mv_position+0(%esi)
	fmuls	cp_normal+0(%ebx)
	flds	mv_position+4(%esi)
	fmuls	cp_normal+4(%ebx)
	flds	mv_position+8(%esi)
	fmuls	cp_normal+8(%ebx)
	fxch	%st(1)
	faddp	%st(0),%st(2)		// d0mul2 | d0add0

	flds	mv_position+0(%edx)
	fmuls	cp_normal+0(%ebx)
	flds	mv_position+4(%edx)
	fmuls	cp_normal+4(%ebx)
	flds	mv_position+8(%edx)
	fmuls	cp_normal+8(%ebx)
	fxch	%st(1)
	faddp	%st(0),%st(2)		// d1mul2 | d1add0 | d0mul2 | d0add0
	fxch	%st(3)				// d0add0 | d1add0 | d0mul2 | d1mul2

	faddp	%st(0),%st(2)		// d1add0 | dot0 | d1mul2 
	faddp	%st(0),%st(2)		// dot0 | dot1

	fsubs	cp_dist(%ebx)		// d0 | dot1
	fxch	%st(1)				// dot1 | d0
	fsubs	cp_dist(%ebx)		// d1 | d0
	fxch	%st(1)
	fstps	Ld0
	fstps	Ld1

//			if (d0 >= 0)
//			{
	movl	Ld0,%eax
	movl	Ld1,%ecx
	orl		%eax,%ecx
	js		Lp2

// both points are unclipped

Lcontinue:

//
//				R_ClipEdge (&clipvert, pv1, clip->next);
//				return;
//			}
//		} while ((clip = clip->next) != NULL);
	movl	cp_next(%ebx),%ebx
	testl	%ebx,%ebx
	jnz		Lcliploop

//	}

//// add the edge
//	R_EmitEdge (pv0, pv1);
Lemit:

//
// set integer rounding to ceil mode, set to single precision
//
// FIXME: do away with by manually extracting integers from floats?
// FIXME: set less often
	fldcw	ceil_cw

//	edge_t	*edge, *pcheck;
//	int		u_check;
//	float	u, u_step;
//	vec3_t	local, transformed;
//	float	*world;
//	int		v, v2, ceilv0;
//	float	scale, lzi0, u0, v0;
//	int		side;

//	if (r_lastvertvalid)
//	{
	cmpl	$0,C(r_lastvertvalid)
	jz		LCalcFirst

//		u0 = r_u1;
//		v0 = r_v1;
//		lzi0 = r_lzi1;
//		ceilv0 = r_ceilv1;
	movl	C(r_lzi1),%eax
	movl	C(r_u1),%ecx
	movl	%eax,Lzi0
	movl	%ecx,Lu0
	movl	C(r_v1),%ecx
	movl	C(r_ceilv1),%eax
	movl	%ecx,Lv0
	movl	%eax,Lceilv0
	jmp		LCalcSecond

//	}

LCalcFirst:

//	else
//	{
//		world = &pv0->position[0];

	call	LTransformAndProject	// v0 | lzi0 | u0

	fsts	Lv0
	fxch	%st(2)					// u0 | lzi0 | v0
	fstps	Lu0						// lzi0 | v0
	fstps	Lzi0					// v0

//		ceilv0 = (int)(v0 - 2000) + 2000; // ceil(v0);
	fistpl	Lceilv0

//	}

LCalcSecond:

//	world = &pv1->position[0];
	movl	%edx,%esi

	call	LTransformAndProject	// v1 | lzi1 | u1

	flds	Lu0						// u0 | v1 | lzi1 | u1
	fxch	%st(3)					// u1 | v1 | lzi1 | u0
	flds	Lzi0					// lzi0 | u1 | v1 | lzi1 | u0
	fxch	%st(3)					// lzi1 | u1 | v1 | lzi0 | u0
	flds	Lv0						// v0 | lzi1 | u1 | v1 | lzi0 | u0
	fxch	%st(3)					// v1 | lzi1 | u1 | v0 | lzi0 | u0

//	r_ceilv1 = (int)(r_v1 - 2000) + 2000; // ceil(r_v1);
	fistl	C(r_ceilv1)

	fldcw	single_cw				// put back normal floating-point state

	fsts	C(r_v1)
	fxch	%st(4)					// lzi0 | lzi1 | u1 | v0 | v1 | u0

//	if (r_lzi1 > lzi0)
//		lzi0 = r_lzi1;
	fcom	%st(1)
	fnstsw	%ax
	testb	$1,%ah
	jz		LP0
	fstp	%st(0)
	fld		%st(0)
LP0:

	fxch	%st(1)					// lzi1 | lzi0 | u1 | v0 | v1 | u0
	fstps	C(r_lzi1)				// lzi0 | u1 | v0 | v1 | u0
	fxch	%st(1)
	fsts	C(r_u1)
	fxch	%st(1)

//	if (lzi0 > r_nearzi)	// for mipmap finding
//		r_nearzi = lzi0;
	fcoms	C(r_nearzi)
	fnstsw	%ax
	testb	$0x45,%ah
	jnz		LP1
	fsts	C(r_nearzi)
LP1:

// // for right edges, all we want is the effect on 1/z
//	if (r_nearzionly)
//		return;
	movl	C(r_nearzionly),%eax
	testl	%eax,%eax
	jz		LP2
LPop5AndDone:
	movl	C(cacheoffset),%eax
	movl	C(r_framecount),%edx
	cmpl	$0x7FFFFFFF,%eax
	jz		LDoPop
	andl	$(FRAMECOUNT_MASK),%edx
	orl		$(FULLY_CLIPPED_CACHED),%edx
	movl	%edx,C(cacheoffset)

LDoPop:
	fstp	%st(0)			// u1 | v0 | v1 | u0
	fstp	%st(0)			// v0 | v1 | u0
	fstp	%st(0)			// v1 | u0
	fstp	%st(0)			// u0
	fstp	%st(0)
	jmp		Ldone

LP2:

// // create the edge
//	if (ceilv0 == r_ceilv1)
//		return;		// horizontal edge
	movl	Lceilv0,%ebx
	movl	C(edge_p),%edi
	movl	C(r_ceilv1),%ecx
	movl	%edi,%edx
	movl	C(r_pedge),%esi
	addl	$(et_size),%edx
	cmpl	%ecx,%ebx
	jz		LPop5AndDone

	movl	C(r_pedge),%eax
	movl	%eax,et_owner(%edi)

//	side = ceilv0 > r_ceilv1;
//
//	edge->nearzi = lzi0;
	fstps	et_nearzi(%edi)		// u1 | v0 | v1 | u0

//	if (side == 1)
//	{
	jc		LSide0

LSide1:

//	// leading edge (go from p2 to p1)

//		u_step = ((u0 - r_u1) / (v0 - r_v1));
	fsubrp	%st(0),%st(3)		// v0 | v1 | u0-u1
	fsub	%st(1),%st(0)		// v0-v1 | v1 | u0-u1
	fdivrp	%st(0),%st(2)		// v1 | ustep

//	r_emitted = 1;
	movl	$1,C(r_emitted)

//	edge = edge_p++;
	movl	%edx,C(edge_p)

// pretouch next edge
	movl	(%edx),%eax

//		v2 = ceilv0 - 1;
//		v = r_ceilv1;
	movl	%ecx,%eax
	leal	-1(%ebx),%ecx
	movl	%eax,%ebx

//		edge->surfs[0] = 0;
//		edge->surfs[1] = surface_p - surfaces;
	movl	C(surface_p),%eax
	movl	C(surfaces),%esi
	subl	%edx,%edx
	subl	%esi,%eax
	shrl	$(SURF_T_SHIFT),%eax
	movl	%edx,et_surfs(%edi)
	movl	%eax,et_surfs+2(%edi)

	subl	%esi,%esi

//		u = r_u1 + ((float)v - r_v1) * u_step;
	movl	%ebx,Lv
	fildl	Lv					// v | v1 | ustep
	fsubp	%st(0),%st(1)		// v-v1 | ustep
	fmul	%st(1),%st(0)		// (v-v1)*ustep | ustep
	fadds	C(r_u1)				// u | ustep

	jmp		LSideDone

//	}

LSide0:

//	else
//	{
//	// trailing edge (go from p1 to p2)

//		u_step = ((r_u1 - u0) / (r_v1 - v0));
	fsub	%st(3),%st(0)		// u1-u0 | v0 | v1 | u0
	fxch	%st(2)				// v1 | v0 | u1-u0 | u0
	fsub	%st(1),%st(0)		// v1-v0 | v0 | u1-u0 | u0
	fdivrp	%st(0),%st(2)		// v0 | ustep | u0

//	r_emitted = 1;
	movl	$1,C(r_emitted)

//	edge = edge_p++;
	movl	%edx,C(edge_p)

// pretouch next edge
	movl	(%edx),%eax

//		v = ceilv0;
//		v2 = r_ceilv1 - 1;
	decl	%ecx

//		edge->surfs[0] = surface_p - surfaces;
//		edge->surfs[1] = 0;
	movl	C(surface_p),%eax
	movl	C(surfaces),%esi
	subl	%edx,%edx
	subl	%esi,%eax
	shrl	$(SURF_T_SHIFT),%eax
	movl	%edx,et_surfs+2(%edi)
	movl	%eax,et_surfs(%edi)

	movl	$1,%esi

//		u = u0 + ((float)v - v0) * u_step;
	movl	%ebx,Lv
	fildl	Lv					// v | v0 | ustep | u0
	fsubp	%st(0),%st(1)		// v-v0 | ustep | u0
	fmul	%st(1),%st(0)		// (v-v0)*ustep | ustep | u0
	faddp	%st(0),%st(2)		// ustep | u
	fxch	%st(1)				// u | ustep

//	}

LSideDone:

//	edge->u_step = u_step*0x100000;
//	edge->u = u*0x100000 + 0xFFFFF;

	fmuls	fp_1m				// u*0x100000 | ustep
	fxch	%st(1)				// ustep | u*0x100000
	fmuls	fp_1m				// ustep*0x100000 | u*0x100000
	fxch	%st(1)				// u*0x100000 | ustep*0x100000
	fadds	fp_1m_minus_1		// u*0x100000 + 0xFFFFF | ustep*0x100000
	fxch	%st(1)				// ustep*0x100000 | u*0x100000 + 0xFFFFF
	fistpl	et_u_step(%edi)		// u*0x100000 + 0xFFFFF
	fistpl	et_u(%edi)

// // we need to do this to avoid stepping off the edges if a very nearly
// // horizontal edge is less than epsilon above a scan, and numeric error
// // causes it to incorrectly extend to the scan, and the extension of the
// // line goes off the edge of the screen
// // FIXME: is this actually needed?
//	if (edge->u < r_refdef.vrect_x_adj_shift20)
//		edge->u = r_refdef.vrect_x_adj_shift20;
//	if (edge->u > r_refdef.vrectright_adj_shift20)
//		edge->u = r_refdef.vrectright_adj_shift20;
	movl	et_u(%edi),%eax
	movl	C(r_refdef)+rd_vrect_x_adj_shift20,%edx
	cmpl	%edx,%eax
	jl		LP4
	movl	C(r_refdef)+rd_vrectright_adj_shift20,%edx
	cmpl	%edx,%eax
	jng		LP5
LP4:
	movl	%edx,et_u(%edi)
	movl	%edx,%eax
LP5:

// // sort the edge in normally
//	u_check = edge->u;
//
//	if (edge->surfs[0])
//		u_check++;	// sort trailers after leaders
	addl	%esi,%eax

//	if (!newedges[v] || newedges[v]->u >= u_check)
//	{
	movl	C(newedges)(,%ebx,4),%esi
	testl	%esi,%esi

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲亚洲国产日韩| 国产精品国模大尺度视频| 久久这里只有精品首页| 国产午夜亚洲精品羞羞网站| 亚洲一区二区三区小说| 国产.欧美.日韩| 69堂精品视频| 亚洲欧美一区二区不卡| 黄网站免费久久| 欧美日韩一区高清| 中文字幕一区在线观看视频| 另类小说综合欧美亚洲| 一本大道久久a久久精品综合| 久久久综合视频| 麻豆精品新av中文字幕| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国模少妇一区二区三区| 日韩欧美中文一区| 一区二区三区在线免费视频 | 欧美一二三区在线| 亚洲韩国精品一区| 色婷婷久久综合| 国产精品青草综合久久久久99| 免费观看在线色综合| 欧美三级欧美一级| 一区二区在线观看不卡| 99久久免费精品| 136国产福利精品导航| 国产成人精品亚洲午夜麻豆| 精品福利二区三区| 久久se精品一区二区| 精品美女在线观看| 免费欧美高清视频| 欧美一卡二卡三卡| 五月天婷婷综合| 欧美日韩黄色一区二区| 亚洲国产欧美一区二区三区丁香婷| 波多野结衣精品在线| 国产精品你懂的在线欣赏| 成人小视频在线| 国产精品激情偷乱一区二区∴| 国产iv一区二区三区| 国产精品久99| 99精品视频在线播放观看| 亚洲色图欧美激情| 在线看一区二区| 日韩中文字幕亚洲一区二区va在线 | 亚洲一区二区黄色| 欧美夫妻性生活| 久久精品国产精品青草| 久久精品亚洲一区二区三区浴池| 国产一区二区h| 日本一区二区三区四区| 91丨九色丨国产丨porny| 亚洲免费观看高清完整版在线 | 亚洲午夜激情网页| 91精选在线观看| 黄一区二区三区| 亚洲日本青草视频在线怡红院 | 日韩久久久久久| 国产91综合网| 亚洲综合激情小说| 69成人精品免费视频| 国内精品免费**视频| 国产精品久99| 欧美狂野另类xxxxoooo| 国产乱子轮精品视频| 中文字幕亚洲一区二区av在线| 精品视频色一区| 国产精品亚洲视频| 一区二区三区免费观看| 日韩欧美在线123| 成人av在线网站| 日精品一区二区三区| 国产性天天综合网| 欧美日韩亚洲综合一区| 国产成人高清视频| 亚洲高清三级视频| 国产精品欧美久久久久一区二区| 欧美三级日韩三级国产三级| 国产91综合一区在线观看| 天堂一区二区在线免费观看| 中文字幕精品—区二区四季| 91精品国产色综合久久久蜜香臀| 成人免费看视频| 日韩av网站在线观看| 亚洲婷婷国产精品电影人久久| 日韩精品综合一本久道在线视频| 色欧美日韩亚洲| 国产成人精品一区二| 免费欧美在线视频| 亚洲在线一区二区三区| 久久精品一二三| 日韩精品中文字幕一区| 欧美调教femdomvk| 91在线小视频| 丁香桃色午夜亚洲一区二区三区| 丝袜美腿一区二区三区| 亚洲黄色小视频| 自拍av一区二区三区| 国产欧美日韩中文久久| 欧美www视频| 日韩一区二区三区视频| 欧美日韩一卡二卡三卡| 91传媒视频在线播放| 不卡一区二区中文字幕| 国产精品一二三| 国产最新精品精品你懂的| 伦理电影国产精品| 麻豆精品在线看| 毛片不卡一区二区| 欧美a级一区二区| 午夜欧美在线一二页| 亚洲综合清纯丝袜自拍| 亚洲卡通动漫在线| 亚洲精品高清视频在线观看| 亚洲蜜臀av乱码久久精品| 亚洲图片你懂的| 亚洲天堂2014| 亚洲欧美日本韩国| 樱桃视频在线观看一区| 亚洲女人****多毛耸耸8| 亚洲日本在线天堂| 亚洲欧美视频一区| 亚洲一区二区三区视频在线| 午夜亚洲福利老司机| 亚洲图片欧美一区| 蜜臀精品久久久久久蜜臀| 日本网站在线观看一区二区三区 | 日韩精品一区二区三区四区| 精品国产髙清在线看国产毛片| 久久婷婷一区二区三区| 国产色产综合产在线视频| 国产精品福利一区| 亚洲精品成人悠悠色影视| 午夜av区久久| 麻豆精品国产91久久久久久| 国产一区二区在线免费观看| 国产精品一级片在线观看| av一二三不卡影片| 欧美亚洲高清一区| 欧美大肚乱孕交hd孕妇| 欧美国产国产综合| 亚洲人成小说网站色在线 | 国产一区二区三区黄视频 | 色乱码一区二区三区88| 91精品国产综合久久久久| xf在线a精品一区二区视频网站| 中文字幕欧美三区| 亚洲一区二区综合| 精品一区二区久久久| 91麻豆免费在线观看| 91精品婷婷国产综合久久性色| 久久久精品tv| 一区二区欧美视频| 国产一二三精品| 在线观看av不卡| 久久先锋影音av鲁色资源| 亚洲在线观看免费视频| 国产一区二区在线影院| 欧美日韩在线观看一区二区 | 久久久久国产精品麻豆| 亚洲老司机在线| 国产一区在线不卡| 欧美人妖巨大在线| 国产精品美女一区二区| 免费观看日韩电影| 欧美亚洲图片小说| 国产午夜亚洲精品午夜鲁丝片| 综合色中文字幕| 蜜臀精品久久久久久蜜臀| 高清av一区二区| 欧美va日韩va| 亚洲激情图片小说视频| 亚洲欧美一区二区视频| 亚洲黄色片在线观看| 天天色天天操综合| 国产精品一区二区视频| 国产成人高清在线| 7777精品伊人久久久大香线蕉超级流畅| 亚洲欧洲日韩综合一区二区| 日韩不卡手机在线v区| 成人18视频在线播放| 国产欧美一区二区在线| 性欧美疯狂xxxxbbbb| 国产成人精品亚洲日本在线桃色| 69精品人人人人| 亚洲最大的成人av| 国产激情偷乱视频一区二区三区| 夜夜爽夜夜爽精品视频| 盗摄精品av一区二区三区| 日韩亚洲欧美一区| 亚洲免费观看高清完整| 色素色在线综合| 国产亚洲综合av| 美日韩一级片在线观看| av电影在线观看完整版一区二区| 国产女同互慰高潮91漫画| 全国精品久久少妇| 91福利小视频|