Files
lba1-classic/LIB386/LIB_SVGA/TEXTURE.ASM

2258 lines
45 KiB
NASM

;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
; (c) Adeline 1993
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
.386P
jumps
.model SMALL, SYSCALL
.data
include \projet\lib386\lib_svga\svga.ash
extrn NoLanguage TabVerticG :WORD
extrn NoLanguage TabCoulG :WORD
extrn NoLanguage TabCoulD :WORD
extrn NoLanguage Ymin :WORD
extrn NoLanguage Ymax :WORD
EVEN
public NoLanguage TabText
TabText dw 32*3 dup(00)
boucle dw 00
loopy dw 00
darkdec dw 00
ALIGN 4
xstep dd 0000
ystep dd 0000
ptrlig dd 0000
ptrmap dd 0000
ptrtab dd 0000
public NoLanguage LYmin
public NoLanguage LYmax
LYmin dd 0000
LYmax dd 0000
extrn NoLanguage TabGauche:WORD
extrn NoLanguage TabDroite:WORD
extrn NoLanguage TabX0:WORD
extrn NoLanguage TabY0:WORD
extrn NoLanguage TabX1:WORD
extrn NoLanguage TabY1:WORD
extrn NoLanguage TabPoly:WORD
extrn NoLanguage P_SinTab:WORD
TAB_GAUCHE equ 960*0
TAB_DROITE equ 960*1
TAB_X0 equ 960*2
TAB_Y0 equ 960*3
TAB_X1 equ 960*4
TAB_Y1 equ 960*5
.code
public NoLanguage FillTextPoly
public NoLanguage FillTextPolyNoClip
; public NoLanguage M_FillTextPoly
public NoLanguage FillTextPolyShade
public NoLanguage AsmTexturedTriangleNoClip
public NoLanguage AsmGouraudTriangleNoClip
public NoLanguage AsmFillProp
public NoLanguage AsmFillPropNoClip
; public NoLanguage M_AsmFillProp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*
; ΓûêΓûÇΓûÇΓûÇΓûê ΓûêΓûÇΓûÇΓûÇΓûê Γûê Γûê ΓûäΓûÇ ΓûêΓûêΓûÇΓûÇΓûÇ
; ΓûêΓûêΓûÇΓûÇΓûÇ ΓûêΓûê Γûê ΓûêΓûê ΓûêΓûêΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûê
; ΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
comment #
void FillProp( WORD *ptrdest, WORD x0, WORD y0, WORD x1, WORD y1 )
{
WORD y, t ;
if( y0 > y1 )
{
t=y0; y0=y1; y1=t;
t=x0; x0=x1; x1=t;
}
for( y=y0; y<=y1; y++ )
{
ptrdest[y] = RegleTrois32( x0, x1, y1-y0+1, y-y0 ) ;
}
}
#
AsmFillProp proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0:
cmp eax, [ClipYmax]
jg nofill
cmp ecx, [ClipYmin]
jl nofill
cmp eax, [ClipYmin]
jl clip_ymin
afp01: cmp ecx, [ClipYmax]
jle afp00
clip_ymax:
push edi
push eax
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill2
mov ebp, edx
mov eax, ecx ; y1
sub eax, [ClipYmax] ; ymax - y1
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x1
mov edx, eax
mov ecx, [ClipYmax] ; y1 = ymax
pop eax
pop edi
jmp afp00
clip_ymin:
push edi
push edx
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill1
mov ebp, ebx
sub eax, [ClipYmin] ; ymin - y0
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x0
mov ebx, eax
mov eax, [ClipYmin] ; y0 = ymin
pop edx
pop edi
jmp afp01
afp00: sub ecx, eax ; ecx deltay >= 0
jz nofill ; GASP mettre cas 1 ligne
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0:
;' REPT 16
stosw
adc eax, edx
;' ENDM
;' loop lt0 ; pas touche C ?
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2:
;' REPT 16
stosw
sbb eax, edx
;' ENDM
;' loop afp2
dec ecx
jnz afp2
nofill: ret
nofill1: pop edx
pop edi
ret
nofill2: pop eax
pop edi
ret
AsmFillProp endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
AsmFillPropNoClip proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0: sub ecx, eax ; ecx deltay > 0
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0: stosw
adc eax, edx
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2: stosw
sbb eax, edx
dec ecx
jnz afp2
ret
AsmFillPropNoClip endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
A_FillPropNoClip proc
; mov edi, ptrdest
; mov eax, y0
; mov ecx, y1
; mov ebx, x0
; mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0: sub ecx, eax ; ecx deltay > 0
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0: stosw
adc eax, edx
dec ecx
jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
inc ecx
xchg edx, eax
shr ax, 1
add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2: stosw
sbb eax, edx
dec ecx
jnz afp2
ret
A_FillPropNoClip endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
AsmTexturedTriangleNoClip proc uses esi edi ebx ebp
PX0 TEXTEQU <word ptr[ TabPoly + 1*2 ]>
PY0 TEXTEQU <word ptr[ TabPoly + 2*2 ]>
PX1 TEXTEQU <word ptr[ TabPoly + 4*2 ]>
PY1 TEXTEQU <word ptr[ TabPoly + 5*2 ]>
PX2 TEXTEQU <word ptr[ TabPoly + 7*2 ]>
PY2 TEXTEQU <word ptr[ TabPoly + 8*2 ]>
TX0 TEXTEQU <word ptr[ TabText + 1*2 ]>
TY0 TEXTEQU <word ptr[ TabText + 2*2 ]>
TX1 TEXTEQU <word ptr[ TabText + 4*2 ]>
TY1 TEXTEQU <word ptr[ TabText + 5*2 ]>
TX2 TEXTEQU <word ptr[ TabText + 7*2 ]>
TY2 TEXTEQU <word ptr[ TabText + 8*2 ]>
mov LYmin, 32000
mov LYmax, -32000
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
ttnc0:
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
ttnc0a:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
ttnc0b:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
ttnc0c:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabX0
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabY0
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
ttnc0d:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabX1
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabY1
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
ttnc0e:
ret
AsmTexturedTriangleNoClip endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
AsmGouraudTriangleNoClip proc uses esi edi ebx ebp
PI0 TEXTEQU <word ptr[ TabPoly + 0*2 ]>
PX0 TEXTEQU <word ptr[ TabPoly + 1*2 ]>
PY0 TEXTEQU <word ptr[ TabPoly + 2*2 ]>
PI1 TEXTEQU <word ptr[ TabPoly + 3*2 ]>
PX1 TEXTEQU <word ptr[ TabPoly + 4*2 ]>
PY1 TEXTEQU <word ptr[ TabPoly + 5*2 ]>
PI2 TEXTEQU <word ptr[ TabPoly + 6*2 ]>
PX2 TEXTEQU <word ptr[ TabPoly + 7*2 ]>
PY2 TEXTEQU <word ptr[ TabPoly + 8*2 ]>
mov LYmin, 32000
mov LYmax, -32000
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI0
; shl ebx, 8
movzx eax, PY0
movzx edx, PI1
; shl edx, 8
movzx ecx, PY1
call A_FillPropNoClip
ttnc0:
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI0
; shl ebx, 8
movzx eax, PY0
movzx edx, PI1
; shl edx, 8
movzx ecx, PY1
call A_FillPropNoClip
ttnc0a:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI1
; shl ebx, 8
movzx eax, PY1
movzx edx, PI2
; shl edx, 8
movzx ecx, PY2
call A_FillPropNoClip
ttnc0b:
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI1
; shl ebx, 8
movzx eax, PY1
movzx edx, PI2
; shl edx, 8
movzx ecx, PY2
call A_FillPropNoClip
ttnc0c:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabCoulG
movzx ebx, PI2
; shl ebx, 8
movzx eax, PY2
movzx edx, PI0
; shl edx, 8
movzx ecx, PY0
call A_FillPropNoClip
ttnc0d:
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
mov edi, offset TabCoulD
movzx ebx, PI2
; shl ebx, 8
movzx eax, PY2
movzx edx, PI0
; shl edx, 8
movzx ecx, PY0
call A_FillPropNoClip
ttnc0e:
mov ax, word ptr[LYmin]
mov Ymin, ax
mov ax, word ptr[LYmax]
mov Ymax, ax
ret
AsmGouraudTriangleNoClip endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*
; ΓûÇΓûÇΓûêΓûÇΓûÇ ΓûêΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûä ΓûäΓûÇ ΓûÇΓûÇΓûêΓûÇΓûÇ Γûê Γûê ΓûêΓûÇΓûÇΓûÇΓûê ΓûêΓûÇΓûÇΓûÇΓûÇ ΓûêΓûêΓûÇΓûÇΓûÇ
; ΓûêΓûê ΓûêΓûêΓûÇΓûÇ ΓûäΓûÇΓûä ΓûêΓûê ΓûêΓûê Γûê ΓûêΓûêΓûÇΓûêΓûÇ ΓûêΓûêΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûê
; ΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇ ΓûÇ ΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûÇ ΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ ΓûÇΓûÇΓûÇΓûÇΓûÇ
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
FillTextPolyShade proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, dark:DWORD, source:DWORD
mov eax, dark
mov [darkdec], ax
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3: mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
; add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
cmp ax, word ptr[ ClipXmin ]
jge noclpleft
; clip x min
sub ax, word ptr[ ClipXmin ]
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, word ptr[ ClipXmin ]
noclpleft: add edi, eax
mov cx, word ptr[ esi + TAB_DROITE ]
cmp cx, word ptr[ ClipXmax ]
jle noclpright
; clip x max
mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov ah, al
and al, 15
sub al, byte ptr[darkdec]
jc ovfshd
and ah, 240
or al, ah
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
ovfshd:
and ah, 240
mov al, ah
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPolyShade endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
FillTextPoly proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, source:DWORD
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3: mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
; add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
cmp ax, word ptr[ ClipXmin ]
jge noclpleft
; clip x min
sub ax, word ptr[ ClipXmin ]
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, word ptr[ ClipXmin ]
noclpleft: add edi, eax
mov cx, word ptr[ esi + TAB_DROITE ]
cmp cx, word ptr[ ClipXmax ]
jle noclpright
; clip x max
mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
inc edi
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPoly endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
FillTextPolyNoClip proc uses esi edi ebx ebp,\
pymin:DWORD, pymax:DWORD, source:DWORD
; for( y=ymin; y<=ymax; y++ )
; {
; xg = TabGauche[y] ;
; xd = TabDroite[y] ;
;
; x0 = TabX0[y] ;
; y0 = TabY0[y] ;
;
; x1 = TabX1[y] ;
; y1 = TabY1[y] ;
;
; CopyLine( xg, y, xd-xg+1, x0,y0, x1,y1, ptrmap ) ;
; }
mov edi, [Log]
mov ebx, pymin
add edi, TabOffLine[ ebx*4 ]
mov [ptrlig], edi
mov eax, source
mov [ptrmap], eax
mov ecx, pymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3:
;' mov ebx, [ptrmap]
mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
add edi, eax
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
;' inc ecx
jle l4
movzx eax, word ptr[ esi + TAB_Y0 ]
;' mov edx, eax
;' and edx, 0FFFFFF00h
;' add ebx, edx ; + start buf
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
mov edx, ebp ; word ptr[ esi + TAB_X0 ]
mov [boucle], cx
;' mov ecx, ebx ; ecx ptr source
mov ecx, [ptrmap]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
;' and ebx, 0FFh
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
inc edi
;' add edx, esi
;' add ebx, ebp
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4: add [ptrlig], 640
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
FillTextPolyNoClip endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
END
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
M_FillTextPoly proc uses esi esi ebx ebp,\
ymin:DWORD, ymax:DWORD, source:DWORD
mov edi, [M_Log]
mov ebx, ymin
mov eax, ebx
shr eax, 2
add edi, eax ; TabOffLine[ ebx*4 ]
add edi, 239*80 ; x = 0 = y = 239;
mov [ptrlig], edi
mov eax, ebx
and eax, 3
mov al, byte ptr[Mask_p+eax]
mov byte ptr[maskplane], al
mov eax, source
mov [ptrmap], eax
mov ecx, ymax
sub ecx, ebx
inc ecx
mov [loopy], cx
mov esi, offset TabGauche
shl ebx, 1 ; ymin * word
add esi, ebx
mov [ptrtab], esi
l3:
mov ah, byte ptr[maskplane]
mov dx,3C4h
mov al,02h ; sélectionne MAP MASK REGISTER
out dx,ax
mov edi, [ptrlig]
mov esi, [ptrtab]
movsx eax, word ptr[ esi + TAB_GAUCHE ]
movsx ecx, word ptr[ esi + TAB_DROITE ]
sub ecx, eax
jle l4 ; prevoir cas 1 point
movzx eax, word ptr[ esi + TAB_Y0 ]
movzx ebp, word ptr[ esi + TAB_Y1 ]
sub eax, ebp
neg eax ; -(y0-y1)
inc eax
cdq
idiv ecx
mov [ystep], eax ; step y source
movzx eax, word ptr[ esi + TAB_X1 ] ; delta x
movzx ebp, word ptr[ esi + TAB_X0 ]
sub eax, ebp
inc eax
cdq
idiv ecx
mov [xstep], eax ; step x source
xor eax, eax
mov ax, word ptr[ esi + TAB_GAUCHE ]
mov bx, 239
sub bx, word ptr[ ClipYmax ]
cmp ax, bx
jge noclpleft
; clip x min
mov bx, 239
sub bx, word ptr[ ClipYmax ]
sub ax, bx
mov bx, ax
imul word ptr[xstep]
sub word ptr[ esi + TAB_X0 ], ax
mov ax, bx
imul word ptr[ystep]
sub word ptr[ esi + TAB_Y0 ], ax
mov ax, 239
sub ax, word ptr[ ClipYmax ]
noclpleft: mov ecx, eax
shl eax, 2
add eax, ecx
shl eax, 4 ; *80
sub edi, eax ; sur bonne ligne
mov eax, ecx
mov cx, word ptr[ esi + TAB_DROITE ]
mov dx, 239
sub dx, word ptr[ ClipYmin ]
cmp cx, dx
jle noclpright
; clip x max
mov cx, dx ; mov cx, word ptr[ ClipXmax ]
noclpright: sub cx, ax
inc cx
jle l4
mov [boucle], cx
mov ecx, [ptrmap]
mov dx, word ptr[ esi + TAB_X0 ]
xor ebx, ebx
mov bx, word ptr[ esi + TAB_Y0 ] ; precision ?
mov esi, [xstep]
mov ebp, [ystep]
ALIGN 4
l2: xchg bl,dh ; bl <- dh colonne
mov al,byte ptr[ecx+ebx] ; bh ligne * 256
xchg bl,dh
mov byte ptr[edi], al
sub edi, 80
add dx, si
add bx, bp
dec word ptr[boucle]
jnz l2
l4:
shl byte ptr[maskplane], 1
cmp byte ptr[maskplane], 16
jnz l4a
mov byte ptr[maskplane], 1
add [ptrlig], 1
l4a:
add [ptrtab], 2
dec word ptr[loopy]
jnz l3
ret
M_FillTextPoly endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
M_AsmFillProp proc uses esi edi ebx ebp,\
ptrdest:DWORD, x0:DWORD, y0:DWORD, x1:DWORD, y1:DWORD
mov edi, ptrdest
mov eax, y0
mov ecx, y1
mov ebx, x0
mov edx, x1
cmp eax, ecx ; y0 < y1
jle afp0
xchg eax, ecx ; y0 <> y1
xchg ebx, edx ; x0 <> x1
afp0:
cmp eax, [ClipXmax]
jg nofill
cmp ecx, [ClipXmin]
jl nofill
cmp eax, [ClipXmin]
jl clip_ymin
afp01: cmp ecx, [ClipXmax]
jle afp00
clip_ymax:
push edi
push eax
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill2
mov ebp, edx
mov eax, ecx ; y1
sub eax, [ClipXmax] ; ymax - y1
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x1
mov edx, eax
mov ecx, [ClipXmax] ; y1 = ymax
pop eax
pop edi
jmp afp00
clip_ymin:
push edi
push edx
mov edi, ebx
sub edi, edx ; dx
mov esi, eax
sub esi, ecx ; dy
jz nofill1
mov ebp, ebx
sub eax, [ClipXmin] ; ymin - y0
neg eax
imul edi ; * dx
idiv esi ; / dy
add eax, ebp ; += x0
mov ebx, eax
mov eax, [ClipXmin] ; y0 = ymin
pop edx
pop edi
jmp afp01
afp00: sub ecx, eax ; ecx deltay >= 0
jz nofill ; GASP mettre cas 1 ligne
shl eax, 1
add edi, eax ; (WORD*)ptrdest[y0]
cmp ebx, edx
jg afp1
; x0 < x1
mov ax, dx ; x0
sub ax, bx ; x1 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc
mov ax, bx
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
lt0:
;' REPT 16
stosw
adc eax, edx
;' ENDM
dec ecx
jnz lt0 ; pas touche C ?
;' dec ecx
;' jnz lt0
ret
afp1: ; x0 > x1
mov ax, bx ; x1
sub ax, dx ; x0 delta X (>0)
shl eax, 16
xor edx, edx
div ecx
xchg edx, eax
;' shr ax, 1
;' add ax, 7FFFh
rol edx, 16
shl eax, 16
clc ; la 1ere valeur est bonne
mov ax, bx ; x0
inc ecx
;' add ecx, 16
;' shr ecx, 4
; EAX = .cumul:X
; EDX = .DeltaX:DeltaX
ALIGN 4
afp2:
;' REPT 16
stosw
sbb eax, edx
;' ENDM
dec ecx
jnz afp2
;' dec ecx
;' jnz afp2
nofill: ret
nofill1: pop edx
pop edi
ret
nofill2: pop eax
pop edi
ret
M_AsmFillProp endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
; si = shape list
; bx = y list
; bp = x list
; ax = texture resource
;
disptexture proc
push ds
mov cx,dgroup
mov ds,cx
mov ax, es
mov fs, ax ; data texture
mov es, Log
add si,cl_miny
add bx,cl_leftx
add bp,cl_leftx
lodsw
mov di,ax
lodsw
sub ax,di
js #dispret
add si,2
mov boucle,ax
shl di,1
mov di,scantab[di]
blig:
lodsw ; xd1
mov cx, ax
lodsw ; xd2
sub ax, cx
inc ax
jle h1
mov cx, ax ; delta xd
mov ax, [bx+2] ; y2
sub ax, [bx] ; y1
cwd
idiv cx
mov stepy, ax
mov ax, ds:[bp+2] ; x2
sub ax, ds:[bp] ; x1
cwd
idiv cx
mov stepx, ax
mov dx, [bx]
mov ax, [si-4] ; xd1
cmp ax, minx1
jge l0
sub ax, minx1
push ax
imul stepx
sub ds:[bp], ax
pop ax
imul stepy
sub [bx], ax
mov ax, minx1
l0: mov cx, [si-2] ; xd2
cmp cx, maxx1
jle l1
mov cx, maxx1
l1: sub cx, ax
inc cx
jle h1
push di
push bx
push bp
push si
add di, ax
mov dx, ds:[bp]
mov bx, ds:[bx]
mov si, xdda
mov bp, ydda
bcol: xchg bl,dh
mov al,fs:sp_data[bx]
xchg bl,dh
stosb
add dx,si
add bx,bp
dec ecx
jnz bcol
pop si
pop bp
pop bx
pop di
h1: add bx,4 ; next xy
add bp,4 ; next xy
add di,640 ; next lig
dec boucle
jns #solidloop
#dispret: pop ds
ret
disptexture endp
;*ΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉΓòÉ*/
;*ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇ*/
AsmTexturedTriangleNoClip proc uses esi edi ebx ebp
;' WORD x0, WORD y0, WORD x1, WORD y1, WORD x2, WORD y2,
;' LONG tx0, LONG ty0, LONG tx1, LONG ty1, LONG tx2, LONG ty2,
;' UBYTE *ptrmap )
;'{
;' LONG y, ymin, ymax, xd, xg ;
;' WORD tabpoly[3*4] ;
;' tabpoly[1] = x0 ;
;' tabpoly[2] = y0 ;
;' tabpoly[4] = x1 ;
;' tabpoly[5] = y1 ;
;' tabpoly[7] = x2 ;
;' tabpoly[8] = y2 ;
;'
;' if( !TestVuePoly( tabpoly ) ) return ;
PX0 = word ptr[ offset TabPoly + 1*2 ]
PY0 = word ptr[ offset TabPoly + 2*2 ]
PX1 = word ptr[ offset TabPoly + 4*2 ]
PY1 = word ptr[ offset TabPoly + 5*2 ]
PX2 = word ptr[ offset TabPoly + 7*2 ]
PY2 = word ptr[ offset TabPoly + 8*2 ]
TX0 = word ptr[ offset TabText + 1*2 ]
TY0 = word ptr[ offset TabText + 2*2 ]
TX1 = word ptr[ offset TabText + 4*2 ]
TY1 = word ptr[ offset TabText + 5*2 ]
TX2 = word ptr[ offset TabText + 7*2 ]
TY2 = word ptr[ offset TabText + 8*2 ]
;' ymin = 32000 ;
;' ymax = -32000 ;
mov LYmin, 32000
mov LYmax, -32000
;' if( y0 < y1 )
;' {
;' if( y0 < ymin ) ymin = y0 ;
;' if( y1 > ymax ) ymax = y1 ;
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jge ttnc0
cmp eax, LYmin
jg ttnc1
mov LYmin, eax
ttnc1:
cmp ecx, LYmax
jl ttnc2
mov LYmax, ecx
ttnc2:
;' AsmFillPropNoClip( TabGauche, x0, y0, x1, y1 ) ;
mov edi, offset TabGauche
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx0, y0, tx1, y1 ) ;
mov edi, offset TabX0
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty0, y0, ty1, y1 ) ;
mov edi, offset TabY0
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
;' }
ttnc0:
;' if( y0 > y1 )
;' {
;' if( y0 > ymax ) ymax = y0 ;
;' if( y1 < ymin ) ymin = y1 ;
movzx eax, PY0
movzx ecx, PY1
cmp eax, ecx
jle ttnc0a
cmp ecx, LYmin
jg ttnc1a
mov LYmin, ecx
ttnc1a:
cmp eax, LYmax
jl ttnc2a
mov LYmax, eax
ttnc2a:
;' AsmFillPropNoClip( TabDroite, x0,y0, x1,y1 ) ;
mov edi, offset TabDroite
movzx ebx, PX0
; movzx eax, PY0
movzx edx, PX1
; movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx0, y0, tx1, y1 ) ;
mov edi, offset TabX1
movzx ebx, TX0
movzx eax, PY0
movzx edx, TX1
movzx ecx, PY1
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty0, y0, ty1, y1 ) ;
mov edi, offset TabY1
movzx ebx, TY0
movzx eax, PY0
movzx edx, TY1
movzx ecx, PY1
call A_FillPropNoClip
;' }
ttnc0a:
;' if( y1 < y2 )
;' {
;' if( y1 < ymin ) ymin = y1 ;
;' if( y2 > ymax ) ymax = y2 ;
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jge ttnc0b
cmp eax, LYmin
jg ttnc1b
mov LYmin, eax
ttnc1b:
cmp ecx, LYmax
jl ttnc2b
mov LYmax, ecx
ttnc2b:
;' AsmFillPropNoClip( TabGauche, x1,y1, x2,y2 ) ;
mov edi, offset TabGauche
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx1, y1, tx2, y2 ) ;
mov edi, offset TabX0
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty1, y1, ty2, y2 ) ;
mov edi, offset TabY0
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
;' }
ttnc0b:
;' if( y1 > y2 )
;' {
;' if( y1 > ymax ) ymax = y1 ;
;' if( y2 < ymin ) ymin = y2 ;
movzx eax, PY1
movzx ecx, PY2
cmp eax, ecx
jle ttnc0c
cmp ecx, LYmin
jg ttnc1c
mov LYmin, ecx
ttnc1c:
cmp eax, LYmax
jl ttnc2c
mov LYmax, eax
ttnc2c:
;' AsmFillPropNoClip( TabDroite, x1,y1, x2,y2 ) ;
mov edi, offset TabDroite
movzx ebx, PX1
; movzx eax, PY1
movzx edx, PX2
; movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx1, y1, tx2, y2 ) ;
mov edi, offset TabX1
movzx ebx, TX1
movzx eax, PY1
movzx edx, TX2
movzx ecx, PY2
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty1, y1, ty2, y2 ) ;
mov edi, offset TabY1
movzx ebx, TY1
movzx eax, PY1
movzx edx, TY2
movzx ecx, PY2
call A_FillPropNoClip
;' }
ttnc0c:
;' if( y2 < y0 )
;' {
;' if( y2 < ymin ) ymin = y2 ;
;' if( y0 > ymax ) ymax = y0 ;
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jge ttnc0d
cmp eax, LYmin
jg ttnc1d
mov LYmin, eax
ttnc1d:
cmp ecx, LYmax
jl ttnc2d
mov LYmax, ecx
ttnc2d:
;' AsmFillPropNoClip( TabGauche, x2,y2, x0,y0 ) ;
mov edi, offset TabGauche
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX0, tx2, y2, tx0, y0 ) ;
mov edi, offset TabX0
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY0, ty2, y2, ty0, y0 ) ;
mov edi, offset TabY0
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
;' }
ttnc0d:
;' if( y2 > y0 )
;' {
;' if( y2 > ymax ) ymax = y2 ;
;' if( y0 < ymin ) ymin = y0 ;
movzx eax, PY2
movzx ecx, PY0
cmp eax, ecx
jle ttnc0e
cmp ecx, LYmin
jg ttnc1e
mov LYmin, ecx
ttnc1e:
cmp eax, LYmax
jl ttnc2e
mov LYmax, eax
ttnc2e:
;' AsmFillPropNoClip( TabDroite, x2,y2, x0,y0 ) ;
mov edi, offset TabDroite
movzx ebx, PX2
; movzx eax, PY2
movzx edx, PX0
; movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabX1, tx2, y2, tx0, y0 ) ;
mov edi, offset TabX1
movzx ebx, TX2
movzx eax, PY2
movzx edx, TX0
movzx ecx, PY0
call A_FillPropNoClip
;' AsmFillPropNoClip( TabY1, ty2, y2, ty0, y0 ) ;
mov edi, offset TabY1
movzx ebx, TY2
movzx eax, PY2
movzx edx, TY0
movzx ecx, PY0
call A_FillPropNoClip
;' }
ttnc0e:
;' if( ymin < ClipYmin ) ymin = ClipYmin ;
;' if( ymax > ClipYmax ) ymax = ClipYmax ;
;' if( ymin > ClipYmax ) return ;
;' if( ymax < ClipYmin ) return ;
;' FillTextPolyNoClip( ymin, ymax, ptrmap ) ;
;'}
ret
AsmTexturedTriangleNoClip endp
comment @
/*
void TexturedTriangleNoClip(
WORD x0, WORD y0, WORD x1, WORD y1, WORD x2, WORD y2,
LONG tx0, LONG ty0, LONG tx1, LONG ty1, LONG tx2, LONG ty2,
UBYTE *ptrmap )
{
LONG y, ymin, ymax, xd, xg ;
WORD tabpoly[3*4] ;
tabpoly[1] = x0 ;
tabpoly[2] = y0 ;
tabpoly[4] = x1 ;
tabpoly[5] = y1 ;
tabpoly[7] = x2 ;
tabpoly[8] = y2 ;
if( !TestVuePoly( tabpoly ) ) return ;
ymin = 32000 ;
ymax = -32000 ;
if( y0 < y1 )
{
if( y0 < ymin ) ymin = y0 ;
if( y1 > ymax ) ymax = y1 ;
AsmFillPropNoClip( TabGauche, x0, y0, x1, y1 ) ;
AsmFillPropNoClip( TabX0, tx0, y0, tx1, y1 ) ;
AsmFillPropNoClip( TabY0, ty0, y0, ty1, y1 ) ;
}
if( y0 > y1 )
{
if( y0 > ymax ) ymax = y0 ;
if( y1 < ymin ) ymin = y1 ;
AsmFillPropNoClip( TabDroite, x0,y0, x1,y1 ) ;
AsmFillPropNoClip( TabX1, tx0, y0, tx1, y1 ) ;
AsmFillPropNoClip( TabY1, ty0, y0, ty1, y1 ) ;
}
if( y1 < y2 )
{
if( y1 < ymin ) ymin = y1 ;
if( y2 > ymax ) ymax = y2 ;
AsmFillPropNoClip( TabGauche, x1,y1, x2,y2 ) ;
AsmFillPropNoClip( TabX0, tx1, y1, tx2, y2 ) ;
AsmFillPropNoClip( TabY0, ty1, y1, ty2, y2 ) ;
}
if( y1 > y2 )
{
if( y1 > ymax ) ymax = y1 ;
if( y2 < ymin ) ymin = y2 ;
AsmFillPropNoClip( TabDroite, x1,y1, x2,y2 ) ;
AsmFillPropNoClip( TabX1, tx1, y1, tx2, y2 ) ;
AsmFillPropNoClip( TabY1, ty1, y1, ty2, y2 ) ;
}
if( y2 < y0 )
{
if( y2 < ymin ) ymin = y2 ;
if( y0 > ymax ) ymax = y0 ;
AsmFillPropNoClip( TabGauche, x2,y2, x0,y0 ) ;
AsmFillPropNoClip( TabX0, tx2, y2, tx0, y0 ) ;
AsmFillPropNoClip( TabY0, ty2, y2, ty0, y0 ) ;
}
if( y2 > y0 )
{
if( y2 > ymax ) ymax = y2 ;
if( y0 < ymin ) ymin = y0 ;
AsmFillPropNoClip( TabDroite, x2,y2, x0,y0 ) ;
AsmFillPropNoClip( TabX1, tx2, y2, tx0, y0 ) ;
AsmFillPropNoClip( TabY1, ty2, y2, ty0, y0 ) ;
}
if( ymin < ClipYmin ) ymin = ClipYmin ;
if( ymax > ClipYmax ) ymax = ClipYmax ;
if( ymin > ClipYmax ) return ;
if( ymax < ClipYmin ) return ;
FillTextPolyNoClip( ymin, ymax, ptrmap ) ;
}
*/
@