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

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

?? r_drawa.asm

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

include qasm.inc
include d_if.inc

if	id386

; !!! if these are changed, they must be changed in r_draw.c too !!!
FULLY_CLIPPED_CACHED	equ		080000000h
FRAMECOUNT_MASK			equ		07FFFFFFFh

_DATA SEGMENT	

Ld0 dd 0.0	
Ld1 dd 0.0	
Lstack dd 0	
Lfp_near_clip dd NEAR_CLIP	
Lceilv0 dd 0	
Lv dd 0	
Lu0 dd 0	
Lv0 dd 0	
Lzi0 dd 0	

_DATA ENDS
_TEXT SEGMENT	

;----------------------------------------------------------------------
; edge clipping code
;----------------------------------------------------------------------

pv0		equ		4+12
pv1		equ		8+12
clip	equ		12+12

 align 4	
 public _R_ClipEdge	
_R_ClipEdge:	
 push esi	; preserve register variables
 push edi	
 push ebx	
 mov ds:dword ptr[Lstack],esp	; for clearing the stack later

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

 mov ebx,ds:dword ptr[clip+esp]	
 mov esi,ds:dword ptr[pv0+esp]	
 mov edx,ds:dword ptr[pv1+esp]	

;	if (clip)
;	{
 test ebx,ebx	
 jz Lemit	

;		do
;		{

Lcliploop:	

;			d0 = DotProduct (pv0->position, clip->normal) - clip->dist;
;			d1 = DotProduct (pv1->position, clip->normal) - clip->dist;
 fld ds:dword ptr[mv_position+0+esi]	
 fmul ds:dword ptr[cp_normal+0+ebx]	
 fld ds:dword ptr[mv_position+4+esi]	
 fmul ds:dword ptr[cp_normal+4+ebx]	
 fld ds:dword ptr[mv_position+8+esi]	
 fmul ds:dword ptr[cp_normal+8+ebx]	
 fxch st(1)	
 faddp st(2),st(0)	; d0mul2 | d0add0

 fld ds:dword ptr[mv_position+0+edx]	
 fmul ds:dword ptr[cp_normal+0+ebx]	
 fld ds:dword ptr[mv_position+4+edx]	
 fmul ds:dword ptr[cp_normal+4+ebx]	
 fld ds:dword ptr[mv_position+8+edx]	
 fmul ds:dword ptr[cp_normal+8+ebx]	
 fxch st(1)	
 faddp st(2),st(0)	; d1mul2 | d1add0 | d0mul2 | d0add0
 fxch st(3)	; d0add0 | d1add0 | d0mul2 | d1mul2

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

 fsub ds:dword ptr[cp_dist+ebx]	; d0 | dot1
 fxch st(1)	; dot1 | d0
 fsub ds:dword ptr[cp_dist+ebx]	; d1 | d0
 fxch st(1)	
 fstp ds:dword ptr[Ld0]	
 fstp ds:dword ptr[Ld1]	

;			if (d0 >= 0)
;			{
 mov eax,ds:dword ptr[Ld0]	
 mov ecx,ds:dword ptr[Ld1]	
 or ecx,eax	
 js Lp2	

; both points are unclipped

Lcontinue:	

;
;				R_ClipEdge (&clipvert, pv1, clip->next);
;				return;
;			}
;		} while ((clip = clip->next) != NULL);
 mov ebx,ds:dword ptr[cp_next+ebx]	
 test 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 ds:word ptr[_fpu_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)
;	{
 cmp ds:dword ptr[_r_lastvertvalid],0	
 jz LCalcFirst	

;		u0 = r_u1;
;		v0 = r_v1;
;		lzi0 = r_lzi1;
;		ceilv0 = r_ceilv1;
 mov eax,ds:dword ptr[_r_lzi1]	
 mov ecx,ds:dword ptr[_r_u1]	
 mov ds:dword ptr[Lzi0],eax	
 mov ds:dword ptr[Lu0],ecx	
 mov ecx,ds:dword ptr[_r_v1]	
 mov eax,ds:dword ptr[_r_ceilv1]	
 mov ds:dword ptr[Lv0],ecx	
 mov ds:dword ptr[Lceilv0],eax	
 jmp LCalcSecond	

;	}

LCalcFirst:	

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

 call near ptr LTransformAndProject	; v0 | lzi0 | u0

 fst ds:dword ptr[Lv0]	
 fxch st(2)	; u0 | lzi0 | v0
 fstp ds:dword ptr[Lu0]	; lzi0 | v0
 fstp ds:dword ptr[Lzi0]	; v0

;		ceilv0 = (int)(v0 - 2000) + 2000; // ceil(v0);
 fistp ds:dword ptr[Lceilv0]	

;	}

LCalcSecond:	

;	world = &pv1->position[0];
 mov esi,edx	

 call near ptr LTransformAndProject	; v1 | lzi1 | u1

 fld ds:dword ptr[Lu0]	; u0 | v1 | lzi1 | u1
 fxch st(3)	; u1 | v1 | lzi1 | u0
 fld ds:dword ptr[Lzi0]	; lzi0 | u1 | v1 | lzi1 | u0
 fxch st(3)	; lzi1 | u1 | v1 | lzi0 | u0
 fld ds:dword ptr[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);
 fist ds:dword ptr[_r_ceilv1]	

 fldcw ds:word ptr[_fpu_chop_cw]	; put back normal floating-point state

 fst ds:dword ptr[_r_v1]	
 fxch st(4)	; lzi0 | lzi1 | u1 | v0 | v1 | u0

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

 fxch st(1)	; lzi1 | lzi0 | u1 | v0 | v1 | u0
 fstp ds:dword ptr[_r_lzi1]	; lzi0 | u1 | v0 | v1 | u0
 fxch st(1)	
 fst ds:dword ptr[_r_u1]	
 fxch st(1)	

;	if (lzi0 > r_nearzi)	// for mipmap finding
;		r_nearzi = lzi0;
 fcom ds:dword ptr[_r_nearzi]	
 fnstsw ax	
 test ah,045h	
 jnz LP1	
 fst ds:dword ptr[_r_nearzi]	
LP1:	

; // for right edges, all we want is the effect on 1/z
;	if (r_nearzionly)
;		return;
 mov eax,ds:dword ptr[_r_nearzionly]	
 test eax,eax	
 jz LP2	
LPop5AndDone:	
 mov eax,ds:dword ptr[_cacheoffset]	
 mov edx,ds:dword ptr[_r_framecount]	
 cmp eax,07FFFFFFFh	
 jz LDoPop	
 and edx,offset FRAMECOUNT_MASK	
 or edx,offset FULLY_CLIPPED_CACHED	
 mov ds:dword ptr[_cacheoffset],edx	

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
 mov ebx,ds:dword ptr[Lceilv0]	
 mov edi,ds:dword ptr[_edge_p]	
 mov ecx,ds:dword ptr[_r_ceilv1]	
 mov edx,edi	
 mov esi,ds:dword ptr[_r_pedge]	
 add edx,offset et_size	
 cmp ebx,ecx	
 jz LPop5AndDone	

 mov eax,ds:dword ptr[_r_pedge]	
 mov ds:dword ptr[et_owner+edi],eax	

;	side = ceilv0 > r_ceilv1;
;
;	edge->nearzi = lzi0;
 fstp ds:dword ptr[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));
 fsubp st(3),st(0)	; v0 | v1 | u0-u1
 fsub st(0),st(1)	; v0-v1 | v1 | u0-u1
 fdivp st(2),st(0)	; v1 | ustep

;	r_emitted = 1;
 mov ds:dword ptr[_r_emitted],1	

;	edge = edge_p++;
 mov ds:dword ptr[_edge_p],edx	

; pretouch next edge
 mov eax,ds:dword ptr[edx]	

;		v2 = ceilv0 - 1;
;		v = r_ceilv1;
 mov eax,ecx	
 lea ecx,ds:dword ptr[-1+ebx]	
 mov ebx,eax	

;		edge->surfs[0] = 0;
;		edge->surfs[1] = surface_p - surfaces;
 mov eax,ds:dword ptr[_surface_p]	
 mov esi,ds:dword ptr[_surfaces]	
 sub edx,edx	
 sub eax,esi	
 shr eax,offset SURF_T_SHIFT	
 mov ds:dword ptr[et_surfs+edi],edx	
 mov ds:dword ptr[et_surfs+2+edi],eax	

 sub esi,esi	

;		u = r_u1 + ((float)v - r_v1) * u_step;
 mov ds:dword ptr[Lv],ebx	
 fild ds:dword ptr[Lv]	; v | v1 | ustep
 fsubrp st(1),st(0)	; v-v1 | ustep
 fmul st(0),st(1)	; (v-v1)*ustep | ustep
 fadd ds:dword ptr[_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(0),st(3)	; u1-u0 | v0 | v1 | u0
 fxch st(2)	; v1 | v0 | u1-u0 | u0
 fsub st(0),st(1)	; v1-v0 | v0 | u1-u0 | u0
 fdivp st(2),st(0)	; v0 | ustep | u0

;	r_emitted = 1;
 mov ds:dword ptr[_r_emitted],1	

;	edge = edge_p++;
 mov ds:dword ptr[_edge_p],edx	

; pretouch next edge
 mov eax,ds:dword ptr[edx]	

;		v = ceilv0;
;		v2 = r_ceilv1 - 1;
 dec ecx	

;		edge->surfs[0] = surface_p - surfaces;
;		edge->surfs[1] = 0;
 mov eax,ds:dword ptr[_surface_p]	
 mov esi,ds:dword ptr[_surfaces]	
 sub edx,edx	
 sub eax,esi	
 shr eax,offset SURF_T_SHIFT	
 mov ds:dword ptr[et_surfs+2+edi],edx	
 mov ds:dword ptr[et_surfs+edi],eax	

 mov esi,1	

;		u = u0 + ((float)v - v0) * u_step;
 mov ds:dword ptr[Lv],ebx	
 fild ds:dword ptr[Lv]	; v | v0 | ustep | u0
 fsubrp st(1),st(0)	; v-v0 | ustep | u0
 fmul st(0),st(1)	; (v-v0)*ustep | ustep | u0
 faddp st(2),st(0)	; ustep | u
 fxch st(1)	; u | ustep

;	}

LSideDone:	

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

 fmul ds:dword ptr[fp_1m]	; u*0x100000 | ustep
 fxch st(1)	; ustep | u*0x100000
 fmul ds:dword ptr[fp_1m]	; ustep*0x100000 | u*0x100000
 fxch st(1)	; u*0x100000 | ustep*0x100000
 fadd ds:dword ptr[fp_1m_minus_1]	; u*0x100000 + 0xFFFFF | ustep*0x100000
 fxch st(1)	; ustep*0x100000 | u*0x100000 + 0xFFFFF
 fistp ds:dword ptr[et_u_step+edi]	; u*0x100000 + 0xFFFFF
 fistp ds:dword ptr[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;
 mov eax,ds:dword ptr[et_u+edi]	
 mov edx,ds:dword ptr[_r_refdef+rd_vrect_x_adj_shift20]	
 cmp eax,edx	
 jl LP4	
 mov edx,ds:dword ptr[_r_refdef+rd_vrectright_adj_shift20]	
 cmp eax,edx	
 jng LP5	
LP4:	
 mov ds:dword ptr[et_u+edi],edx	
 mov eax,edx	
LP5:	

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

;	if (!newedges[v] || newedges[v]->u >= u_check)
;	{
 mov esi,ds:dword ptr[_newedges+ebx*4]	
 test esi,esi	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品少妇一区二区三区视频免付费 | 欧美妇女性影城| 亚洲精品一区二区三区蜜桃下载 | 国产成人精品免费看| 欧美亚洲图片小说| 国产精品久久久久四虎| 久久精品国产在热久久| 在线日韩国产精品| 中文字幕亚洲一区二区va在线| 久久精品国产澳门| 欧美日产在线观看| 亚洲一区二区成人在线观看| 国产一区二区三区四区五区美女| 欧美视频日韩视频在线观看| 亚洲欧美另类综合偷拍| 国产精品资源在线观看| 精品久久久久香蕉网| 石原莉奈在线亚洲二区| 在线精品视频免费播放| 亚洲乱码一区二区三区在线观看| 成人久久久精品乱码一区二区三区| 欧美一级二级三级乱码| 日韩中文字幕1| 欧美亚洲综合另类| 亚洲一区二区在线观看视频| 91色porny在线视频| 国产精品美女视频| 99久久精品费精品国产一区二区| 国产日韩三级在线| 国产jizzjizz一区二区| 久久久噜噜噜久久人人看| 国产一区二区三区| 国产午夜亚洲精品羞羞网站| 国产米奇在线777精品观看| 久久久久久久久蜜桃| 国产不卡在线视频| 中文字幕亚洲精品在线观看 | 欧美日韩国产小视频在线观看| 亚洲资源在线观看| 欧美日韩一区不卡| 美女视频一区二区三区| 日韩免费性生活视频播放| 精品在线播放午夜| 国产精品无人区| 色天使色偷偷av一区二区| 亚洲综合成人在线视频| 欧美肥妇bbw| 国精品**一区二区三区在线蜜桃| 久久精品视频免费观看| 91美女蜜桃在线| 日日摸夜夜添夜夜添精品视频| 日韩欧美国产麻豆| 懂色av一区二区三区蜜臀| 亚洲欧洲三级电影| 欧美日韩aaaaaa| 国产在线精品一区二区三区不卡| 国产精品网站在线| 91国产丝袜在线播放| 日韩中文字幕一区二区三区| 欧美成人精品福利| 成人av资源网站| 日本亚洲最大的色成网站www| 久久久亚洲国产美女国产盗摄| 91麻豆免费观看| 欧美a级一区二区| 中文字幕不卡在线播放| 欧美日韩精品欧美日韩精品一 | 婷婷夜色潮精品综合在线| 亚洲精品一区二区三区影院| 99re成人精品视频| 麻豆91免费看| 亚洲女人****多毛耸耸8| 欧美成人精精品一区二区频| 97久久超碰精品国产| 九九在线精品视频| 一区二区三区**美女毛片| 久久婷婷成人综合色| 777色狠狠一区二区三区| 精品午夜一区二区三区在线观看| 亚洲桃色在线一区| 久久久久国产精品厨房| 3atv在线一区二区三区| 97国产精品videossex| 久久www免费人成看片高清| 亚洲综合网站在线观看| 国产精品伦理一区二区| 精品成人在线观看| 欧美一区二区在线观看| 91黄色小视频| 91一区二区在线| 国产成人aaa| 国产麻豆成人传媒免费观看| 亚洲成人av电影| 成人欧美一区二区三区在线播放| 精品国产a毛片| 欧美大片在线观看| 777欧美精品| 欧美电影在线免费观看| 色婷婷精品久久二区二区蜜臂av| 成人激情午夜影院| 国产精品 欧美精品| 激情综合色播激情啊| 美脚の诱脚舐め脚责91 | 久久精品一区四区| 26uuu国产在线精品一区二区| 欧美久久久一区| 欧美日韩免费观看一区三区| 91在线视频观看| 色综合久久综合网欧美综合网| 99综合电影在线视频| 国产91丝袜在线观看| 成人一区二区三区视频在线观看| 国产一区二区三区av电影| 国产一区日韩二区欧美三区| 韩日av一区二区| 国产一区二区三区在线观看免费| 国产一区二区三区精品视频| 国产成人综合亚洲91猫咪| 高清免费成人av| www..com久久爱| 色偷偷一区二区三区| 欧美日韩亚洲综合| 欧美一二三区精品| 久久综合九色综合97婷婷| 久久精品夜色噜噜亚洲aⅴ| 国产日韩v精品一区二区| 国产精品不卡视频| 亚洲午夜久久久久中文字幕久| 偷拍一区二区三区四区| 免费在线观看日韩欧美| 国产精品888| 93久久精品日日躁夜夜躁欧美| 欧美亚洲动漫制服丝袜| 日韩精品资源二区在线| 国产欧美精品一区aⅴ影院| 亚洲素人一区二区| 日韩二区三区四区| 国产成人av一区二区| 日本黄色一区二区| 精品久久久久久久久久久院品网 | 日韩视频不卡中文| 中文字幕成人av| 午夜精品视频一区| 国产真实乱对白精彩久久| 成人精品视频一区二区三区| 在线视频一区二区免费| 精品国产露脸精彩对白| 亚洲天天做日日做天天谢日日欢| 亚洲国产精品欧美一二99| 国产在线麻豆精品观看| 一本色道a无线码一区v| 日韩欧美国产三级| 玉米视频成人免费看| 激情综合色播五月| 欧美一区二区三区影视| 日本一区二区三区四区| 日韩电影在线观看网站| 成人av在线一区二区三区| 69堂亚洲精品首页| 国产精品人人做人人爽人人添| 视频精品一区二区| 色呦呦网站一区| 久久久www成人免费毛片麻豆| 国产精品传媒视频| 麻豆成人91精品二区三区| 91蜜桃传媒精品久久久一区二区| 欧美精品一区二区久久久| 亚洲午夜精品在线| eeuss影院一区二区三区 | 亚洲综合在线视频| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产日韩成人精品| 免费高清在线视频一区·| 欧美性猛交xxxx乱大交退制版| 国产清纯在线一区二区www| 免费在线观看一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 国产欧美日韩不卡免费| 九九九久久久精品| 51精品秘密在线观看| 亚洲最新视频在线播放| 成人精品免费看| 久久亚洲精品国产精品紫薇| 美国一区二区三区在线播放| 欧美情侣在线播放| 亚洲电影视频在线| 欧美色图天堂网| 亚洲自拍欧美精品| 欧美在线三级电影| 亚洲综合丁香婷婷六月香| 在线观看中文字幕不卡| 亚洲精品国产一区二区精华液| 91丝袜呻吟高潮美腿白嫩在线观看| 国产人久久人人人人爽| 国产精品一区2区| 国产日韩综合av| 99免费精品在线观看| 亚洲欧美偷拍卡通变态| 99国产麻豆精品| 亚洲免费观看高清完整版在线 |