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

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

?? xfill.asm

?? 視頻游戲開發C語言源程序
?? ASM
字號:
;-----------------------------------------------------------------------
; MODULE XFILL
;
; Point functions all MODE X 256 Color resolutions
;
; Compile with Tasm.
; C callable.
;
;
; ****** XLIB - Mode X graphics library                ****************
; ******                                               ****************
; ****** Written By Themie Gouthas                     ****************
;
; egg@dstos3.dsto.gov.au
; teg@bart.dsto.gov.au
;-----------------------------------------------------------------------

COMMENT $

  This code is my interpretation of a simple "C" flood filling algorithm
  titled:

  * A Seed Fill Algorithm
  * by Paul Heckbert
  * from "Graphics Gems", Academic Press, 1990

  The original C source is readily available at numerous internet archive
  sites.

  Its been modified and optimized for tweaked 13h modes (Mode X derrivatives).
  The most fundamental change is that it fills a column at a time rather
  than a row at a time to minimize the number of plane setting "out"s.
  And of course the border fill variant was a logical and useful further
  modification.

  Both functions return the number of pixels filled..

  WARNING: These fill functions make heavy use of the stack and no stack
    checking is performed, so caution is advised.

$


include xlib.inc
include xfill.inc

	.code

_x_flood_fill  proc
	ARG X:word,Y:word,PgOfs:word,Color:word
	LOCAL len:word,y1:word,y2:word,deltax:word,floodval:word,\
	      stackptr:word,FillCount:word=STK
	push bp
	mov  bp,sp
	sub  sp,STK
	mov  [FillCount],0
	push di si
	mov  si,[Y]
	mov  ax,[_ScrnLogicalByteWidth]
	mul  si                   ;offset of pixel's scan line in page
	mov  di,[X]
	mov  bx,di
	shr  di,2                 ;X/4 = offset of pixel in scan line
	add  di,ax                ;offset of pixel in page
	add  di,[PgOfs]           ;offset of pixel in display memory
	mov  ax,SCREEN_SEG
	mov  es,ax                ;point ES:DI to the pixel's address

	;---- Select read plane ------

	mov  ah,bl
	and  ah,011b              ;AH = pixel's plane
	mov  al,READ_MAP          ;AL = index in GC of the Read Map reg
	mov  dx,GC_INDEX          ;set the Read Map to read the pixel's
	out  dx,ax                ; plane

	mov  al,es:[di]           ;read the pixel's color
	cmp  al,byte ptr Color    ;Is dest pixel the same color as the flood?
	je   @@Done2              ; if it is abort.

	mov  cx,_LeftClip         ; Is the dest. pixel out of the clipping window?
	sal  cx,2                 ;  if not abort.
	cmp  bx,cx
	jl   @@Done2

	mov  cx,_RightClip
	sal  cx,2
	cmp  bx,cx
	jg   @@Done2

	mov  floodval,ax           ; store the color to flood

	;-- Push fill segment ---

	push bx         ; X
	push si         ; Y
	push si         ; Y
	mov  cx,1       ; deltaX  (either 1 or -1 indicating direction)
	push cx
	mov  stackptr,1

	mov  deltax,-1  ; Initialize first column scan
	mov  y1,si      ;   then bypass some of the preliminary crap in
	mov  y2,si      ;   the main fill loop
	jmp  short @@entry

@@Done2:mov  ax,[FillCount]
	pop  si di
	mov  sp,bp
	pop  bp
	ret

@@NextScanCol:
	dec  stackptr
	js   @@Done2

@@WhileLoop:
	pop  cx           ; get fill segment from stack
	mov  deltax,cx    ; ie deltaX, Y1, Y2, X
	pop  ax
	mov  y2,ax
	pop  si
	mov  y1,si
	pop  bx

	sub  ax,si           ; Acculmulate number of filled pixels
	jns  @@PositiveY
	neg  ax
@@PositiveY:
	add  FillCount,ax


	add  bx,cx          ; move to new column according to deltaX

	mov  ax,bx          ; Make sure the column is within the clipping
	sar  ax,2           ; rectangle
	cmp  ax,_LeftClip
	jl   @@NextScanCol

	cmp  ax,_RightClip
	jg   @@NextScanCol


	;---- Select read plane ------

	mov  ah,bl
	and  ah,011b              ;AH = pixel's plane
	mov  al,READ_MAP          ;AL = index in GC of the Read Map reg
	mov  dx,GC_INDEX          ;set the Read Map to read the pixel's
	out  dx,ax                ; plane

@@entry:

	;---- Select write plane ------

	mov  cl,bl
	and  cl,011b              ;CL = pixel's plane
	mov  ax,0100h + MAP_MASK  ;AL = index in SC of Map Mask reg
	shl  ah,cl                ;set only the bit for the pixel's
				  ; plane to 1
	mov  dx,SC_INDEX          ;set the Map Mask to enable only the
	out  dx,ax                ; pixel's plane

	mov  ax,_ScrnLogicalByteWidth     ; store logical width in CX
	mov  cx,ax                        ; get offset of scan row
	mul  si                           ; set ES:DI ->
	mov  di,bx                        ; address of pixel at x,y1
	shr  di,2
	add  di,ax
	add  di,PgOfs          ;ES:DI->first pixel of column segment to fill
	mov  dx,di             ; save y1 offset for after upward fill

	mov  al,byte ptr Color
	mov  ah,byte ptr floodval

@@FillColUpward:
	cmp  si,_TopClip           ; Dont fill beyond clip boundaries
	jl   @@UpwardFillDone

	cmp  es:[di],ah            ; if flood pixel color then replace
	jne  @@UpwardFillDone      ; with new color otherwise column is done

	mov  es:[di],al
	sub  di,cx
	dec  si
	jmp  short @@FillColUpward

@@UpwardFillDone:
	cmp  si,y1
	jge  @@Skip

	inc  si
	mov  len,si

	cmp  si,y1
	jge  @@AtColumnTop

	push bx     ;  queue an upward leak check
	push si
	mov  ax,y1
	dec  ax
	push ax
	mov  ax,deltax
	neg  ax
	push ax
	inc  stackptr

@@AtColumnTop:
	mov  si,y1
	mov  di,dx
	add  di,cx
	inc  si


@@ColumnLoop:
	mov  ah,byte ptr floodval
	mov  al,byte ptr Color

@@DownwardFill:
	cmp  si,_BottomClip
	jg   @@DownwardFillDone
	cmp  es:[di],ah
	jne  @@DownwardFillDone
	mov  es:[di],al
	add  di,cx
	inc  si
	jmp  short @@DownwardFill

@@DownwardFillDone:

	push bx      ; queue an upward leak check
	mov  ax,len
	push ax
	mov  ax,si
	dec  ax
	push ax
	mov  ax,deltax
	push ax
	inc  stackptr

	mov  ax,y2
	inc  ax
	cmp  si,ax
	jle  @@Skip

	push bx       ;  queue a downward leak check
	push ax
	mov  ax,si
	dec  ax
	push ax
	mov  ax,deltax
	neg  ax
	push ax
	inc  stackptr

@@Skip:
	mov  ah,byte ptr floodval
	mov  dx,y2

@@Backtrack:
	add  di,cx
	inc  si
	cmp  si,dx
	jg   @@BacktrackDone

	cmp  byte ptr es:[di],ah
	jne  @@Backtrack

@@BacktrackDone:
	mov  len,si
	cmp  si,dx
	jle  @@ColumnLoop

	dec  stackptr
	js   @@Done
	jmp  @@WhileLoop
@@Done:
	mov  ax,[FillCount]
	pop  si di
	mov  sp,bp
	pop  bp
	ret
_x_flood_fill   endp


_x_boundary_fill  proc
	ARG X:word,Y:word,PgOfs:word,BoundaryColor:word,Color:word
	LOCAL len:word,y1:word,y2:word,deltax:word,y1_offs:word,\
	      stackptr:word,FillCount:word=STK
	push bp
	mov  bp,sp
	sub  sp,STK
	mov  [FillCount],0
	push di si
	mov  si,[Y]
	mov  ax,[_ScrnLogicalByteWidth]
	mul  si                  ;offset of pixel's scan line in page
	mov  di,[X]
	mov  bx,di
	shr  di,2                 ;X/4 = offset of pixel in scan line
	add  di,ax                ;offset of pixel in page
	add  di,[PgOfs]           ;offset of pixel in display memory
	mov  ax,SCREEN_SEG
	mov  es,ax                ;point ES:DI to the pixel's address

	;---- Select read plane ------

	mov  ah,bl
	and  ah,011b              ;AH = pixel's plane
	mov  al,READ_MAP          ;AL = index in GC of the Read Map reg
	mov  dx,GC_INDEX          ;set the Read Map to read the pixel's
	out  dx,ax                ; plane

	mov  al,es:[di]           ;read the pixel's color
	cmp  al,byte ptr Color    ;Is dest pixel the same color as the flood?
	je   @@Done2

	cmp  al,byte ptr BoundaryColor ;Is dest pixel the same color
	je   @@Done2                   ; as the boundary color?


	mov  cx,_LeftClip         ; Is the dest. pixel out of the clipping window?
	sal  cx,2
	cmp  bx,cx
	jl   @@Done2

	mov  cx,_RightClip
	sal  cx,2
	cmp  bx,cx
	jg   @@Done2

	push bx      ; X
	push si      ; Y
	push si      ; Y
	mov  cx,1    ; DX
	push cx
	mov  stackptr,1
	mov  al,byte ptr BoundaryColor
	mov  byte ptr [Color+1],al

	mov  deltax,-1
	mov  y1,si
	mov  y2,si
	jmp  short @@entry

@@Done2:mov  ax,[FillCount]
	pop  si di
	mov  sp,bp
	pop  bp
	ret

@@NextScanCol:
	dec  stackptr
	js   @@Done2

@@WhileLoop:
	pop  cx
	mov  deltax,cx
	pop  ax
	mov  y2,ax
	pop  si
	mov  y1,si
	pop  bx
	add  bx,cx   ; bx = X

	sub  ax,si           ; Acculmulate number of filled pixels
	jns  @@PositiveY
	neg  ax
@@PositiveY:
	add  FillCount,ax



	mov  ax,bx          ; Make sure the column is within the clipping
	sar  ax,2           ; rectangle
	cmp  ax,_LeftClip
	jl   @@NextScanCol
	cmp  ax,_RightClip
	jg   @@NextScanCol


	;---- Select read plane ------

	mov  ah,bl
	and  ah,011b              ;AH = pixel's plane
	mov  al,READ_MAP          ;AL = index in GC of the Read Map reg
	mov  dx,GC_INDEX          ;set the Read Map to read the pixel's
	out  dx,ax                ; plane

@@entry:

	;---- Select write plane ------

	mov  cl,bl
	and  cl,011b              ;CL = pixel's plane
	mov  ax,0100h + MAP_MASK  ;AL = index in SC of Map Mask reg
	shl  ah,cl                ;set only the bit for the pixel's
				  ; plane to 1
	mov  dx,SC_INDEX          ;set the Map Mask to enable only the
	out  dx,ax                ; pixel's plane

	mov  ax,_ScrnLogicalByteWidth     ; store logical width in CX
	mov  cx,ax                        ; get offset of scan row
	mul  si                           ; set ES:DI ->
	mov  di,bx                        ; address of pixel at x,y1
	shr  di,2
	add  di,ax
	add  di,PgOfs
	mov  y1_offs,di                   ; save y1 offset for after upward fill

	mov   ax,Color                    ; al = Color ah = BoundaryColor

@@FillColUpward:
	cmp  si,_TopClip                  ; Dont fill beyond clip boundaries
	jl   @@UpwardFillDone

	mov  dl,es:[di]
	cmp  dl,ah
	je   @@UpwardFillDone

	cmp  dl,al
	je   @@UpwardFillDone

	mov  es:[di],al
	sub  di,cx
	dec  si
	jmp  short @@FillColUpward

@@UpwardFillDone:
	cmp  si,y1
	jge  @@Skip

	inc  si
	mov  len,si

	cmp  si,y1
	jge  @@AtColumnTop

	push bx     ;  queue an upward leak check
	push si
	mov  ax,y1
	dec  ax
	push ax
	mov  ax,deltax
	neg  ax
	push ax
	inc  stackptr

@@AtColumnTop:
	mov  si,y1
	mov  di,y1_offs
	add  di,cx
	inc  si


@@ColumnLoop:
	mov   ax,Color           ; al = Color ah = BoundaryColor

@@DownwardFill:
	cmp  si,_BottomClip
	jg   @@DownwardFillDone

	cmp  es:[di],ah
	je   @@DownwardFillDone

	cmp  es:[di],al
	je   @@DownwardFillDone

	mov  es:[di],al
	add  di,cx
	inc  si
	jmp  short @@DownwardFill

@@DownwardFillDone:

	push bx      ; queue an upward leak check
	mov  ax,len
	push ax
	mov  ax,si
	dec  ax
	push ax
	mov  ax,deltax
	push ax
	inc  stackptr

	mov  ax,y2
	inc  ax
	cmp  si,ax
	jle  @@Skip

	push bx       ;  queue a downward leak check
	push ax
	mov  ax,si
	dec  ax
	push ax
	mov  ax,deltax
	neg  ax
	push ax
	inc  stackptr

@@Skip:
	mov  ax,Color                ; al = Color ah = BoundaryColor

@@Backtrack:
	add  di,cx
	inc  si
	cmp  si,y2
	jg   @@BacktrackDone

	mov  dl,byte ptr es:[di]
	cmp  dl,al
	je   @@Backtrack

	cmp  dl,ah
	je   @@Backtrack

@@BacktrackDone:
	mov  len,si
	cmp  si,y2
	jle  @@ColumnLoop

	dec  stackptr
	js   @@Done
	jmp  @@WhileLoop
@@Done:
	mov  ax,[FillCount]
	pop  si di
	mov  sp,bp
	pop  bp
	ret
_x_boundary_fill   endp

end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情五月婷婷| 欧日韩精品视频| 91福利视频久久久久| 日韩欧美一级二级三级久久久| 欧美激情在线观看视频免费| 蜜臀久久99精品久久久久久9| 91丨国产丨九色丨pron| 国产欧美一区二区精品性| 性做久久久久久| 色呦呦日韩精品| 中文字幕av不卡| 国产一区二区福利视频| 在线成人av网站| 一区二区三区欧美亚洲| 99re成人精品视频| 国产精品成人网| 成人黄色小视频| 中文子幕无线码一区tr| 狠狠色丁香婷婷综合| 欧美一区二区三区免费在线看| 亚洲码国产岛国毛片在线| www.性欧美| 国产精品久久久久久户外露出| 国产激情视频一区二区三区欧美 | 成人sese在线| 国产三区在线成人av| 精久久久久久久久久久| 51精品秘密在线观看| 亚洲国产一区在线观看| 欧美影视一区在线| 亚洲黄色小视频| 欧洲亚洲精品在线| 亚洲午夜在线视频| 欧美日本国产视频| 日韩av网站在线观看| 欧美一区二区视频在线观看2022| 日本麻豆一区二区三区视频| 日韩一级欧美一级| 韩国女主播成人在线| 久久久久国产精品人| 国产精品白丝jk黑袜喷水| 国产无人区一区二区三区| 波多野结衣的一区二区三区| 日韩一区有码在线| 欧美日韩国产精品自在自线| 日韩激情中文字幕| 久久久久高清精品| zzijzzij亚洲日本少妇熟睡| 一区二区三区欧美久久| 欧美日韩国产一级片| 久久精品国产免费看久久精品| 久久综合色综合88| jlzzjlzz亚洲女人18| 亚洲成av人综合在线观看| 日韩精品中文字幕在线不卡尤物 | 国产拍欧美日韩视频二区| 国产盗摄一区二区| 亚洲一区二区三区四区中文字幕| 欧美一区二区三级| 成人一区二区三区视频在线观看| 亚洲品质自拍视频| 日韩一卡二卡三卡国产欧美| 处破女av一区二区| 午夜欧美大尺度福利影院在线看| 久久蜜桃一区二区| 欧美午夜宅男影院| 国产精品77777竹菊影视小说| 亚洲蜜臀av乱码久久精品| 欧美一级日韩一级| 91蜜桃在线免费视频| 日本v片在线高清不卡在线观看| 久久久精品综合| 欧美日韩卡一卡二| 成人精品gif动图一区| 日韩制服丝袜先锋影音| 中文字幕在线观看一区| 日韩三级视频在线观看| 色综合激情五月| 国产成+人+日韩+欧美+亚洲| 婷婷久久综合九色综合伊人色| 日本一区二区久久| 91精品午夜视频| 色狠狠一区二区三区香蕉| 久久超碰97中文字幕| 亚洲制服丝袜一区| 日韩一区有码在线| 国产日本欧洲亚洲| 日韩免费看网站| 欧美日韩高清影院| 色综合一个色综合亚洲| 成人午夜视频免费看| 精品一区二区三区在线观看国产| 亚洲成国产人片在线观看| 综合中文字幕亚洲| 欧美极品美女视频| 久久精品在这里| 久久色在线视频| 精品毛片乱码1区2区3区| 欧美日韩国产高清一区二区三区| 色悠悠亚洲一区二区| 不卡av在线网| av在线这里只有精品| 国产成人三级在线观看| 国产在线播精品第三| 看片网站欧美日韩| 久久国内精品视频| 蜜臀国产一区二区三区在线播放 | 中文字幕欧美一区| 国产日韩影视精品| 国产视频一区在线播放| 精品国产伦一区二区三区观看体验| 91精品国产欧美一区二区18 | 91激情在线视频| 一本色道久久综合精品竹菊| 99国产精品国产精品久久| 波多野结衣在线aⅴ中文字幕不卡| 国产成人在线网站| 成人不卡免费av| 色美美综合视频| 欧美日韩日日夜夜| 日韩一二在线观看| 26uuu精品一区二区三区四区在线| 日韩欧美国产一二三区| 欧美成人精品3d动漫h| 久久一区二区三区国产精品| 精品国产一区a| 欧美国产乱子伦 | 蜜臀av一区二区三区| 美女尤物国产一区| 国产成人丝袜美腿| 色综合久久88色综合天天| 在线播放日韩导航| 欧美精品一区二区蜜臀亚洲| 中文字幕欧美激情一区| 亚洲欧美一区二区三区久本道91| 亚洲一区二区三区四区的| 日本成人在线看| 高清日韩电视剧大全免费| 色菇凉天天综合网| 日韩一级免费观看| 1区2区3区欧美| 青青青伊人色综合久久| 国产成人av影院| 欧美色综合网站| 久久综合资源网| 亚洲激情第一区| 久久疯狂做爰流白浆xx| 99久久99久久久精品齐齐| 欧美精品一卡两卡| 国产精品女同互慰在线看| 亚洲国产成人高清精品| 激情av综合网| 欧美日韩一区二区三区在线 | 555www色欧美视频| 日本一区二区三区电影| 亚洲图片欧美视频| 成人免费毛片嘿嘿连载视频| 欧美日韩综合在线| 国产精品欧美一区喷水| 天天av天天翘天天综合网| 国产成人欧美日韩在线电影| 欧美日韩久久久| 国产欧美日本一区视频| 丝袜国产日韩另类美女| 成人va在线观看| 久久影院午夜片一区| 午夜精品久久久久久| 99久久精品免费看国产| 久久精品一区四区| 麻豆国产精品官网| 欧美伊人久久久久久久久影院| 国产夜色精品一区二区av| 奇米在线7777在线精品| 91首页免费视频| 欧美国产亚洲另类动漫| 久久成人免费网站| 欧美日韩免费高清一区色橹橹| 国产精品国产自产拍高清av | 久久久久久97三级| 丝瓜av网站精品一区二区 | 亚洲一区二区三区爽爽爽爽爽| 国产凹凸在线观看一区二区| 日韩视频在线你懂得| 亚洲成人精品影院| 日本福利一区二区| 亚洲三级在线观看| 成人国产在线观看| 亚洲国产精品ⅴa在线观看| 久久精品99国产精品| 制服.丝袜.亚洲.另类.中文 | 国产毛片精品国产一区二区三区| 91精品国产aⅴ一区二区| 亚洲成人在线免费| 欧美无砖专区一中文字| 亚洲综合一区在线| 欧美性色欧美a在线播放| 亚洲乱码国产乱码精品精可以看| 91免费视频观看| 夜夜嗨av一区二区三区网页| 色综合久久久久|