?? dxrender.pas
字號:
end;
end;
32: begin
asm
jmp @@EndCode
@@StartCode:
mov dword ptr [edi],eax
@@EndCode:
{$I DXRender.inc}
end;
end;
end;
end;
procedure genUpdateDestAddress(var Code: Pointer);
var
ByteCount: DWORD;
begin
ByteCount := Dest.BitCount shr 3;
if ByteCount=1 then
begin
asm
jmp @@EndCode
@@StartCode:
inc edi
@@EndCode:
{$I DXRender.inc}
end;
end else
begin
asm
jmp @@EndCode
@@StartCode:
add edi,$11{}@@ByteCount: // Dest.BitCount div 8;
@@EndCode:
{$I DXRender.inc}
{ @@ByteCount }
mov eax,ByteCount
mov edx,offset @@ByteCount-1
sub edx,offset @@StartCode
mov byte ptr [ecx+edx],al
end;
end;
end;
procedure genReadSurfacePixel_Tile(var Code: Pointer; const Source: TDXR_Surface; Axis: PDXRMachine_Axis);
begin
case Source.BitCount of
1: begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}//TexY
@@TexY:
shr esi,16
and esi,$11111111{} @@MaskY: // Source.HeightMask
imul esi,$11111111{}@@Pitch: // Source.pitch
mov edx,dword ptr [offset _null]{}//TexX
@@TexX:
shr edx,16
and edx,$11111111{} @@MaskX: // Source.WidthMask
mov ebx,edx
shr edx,3
and ebx,7
movzx eax,byte ptr [esi+edx+$11111111]
@@Bits: // Source.Bits
and eax,dword ptr [offset Mask1+ebx*4]
push ecx
mov ecx,dword ptr [offset Shift1+ebx*4]
shr eax,cl
pop ecx
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskY }
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Pitch }
mov eax,Source; mov eax,[eax + TDXR_Surface.Pitch]
mov edx,offset @@Pitch-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
2: begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}//TexY
@@TexY:
shr esi,16
and esi,$11111111{} @@MaskY: // Source.HeightMask
imul esi,$11111111{}@@Pitch: // Source.pitch
mov edx,dword ptr [offset _null]{}//TexX
@@TexX:
shr edx,16
and edx,$11111111{} @@MaskX: // Source.WidthMask
mov ebx,edx
shr edx,2
and ebx,3
movzx eax,byte ptr [esi+edx+$11111111]
@@Bits: // Source.Bits
and eax,dword ptr [offset Mask2+ebx*4]
push ecx
mov ecx,dword ptr [offset Shift2+ebx*4]
shr eax,cl
pop ecx
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskY }
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Pitch }
mov eax,Source; mov eax,[eax + TDXR_Surface.Pitch]
mov edx,offset @@Pitch-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
4: begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}//TexY
@@TexY:
shr esi,16
and esi,$11111111{} @@MaskY: // Source.HeightMask
imul esi,$11111111{}@@Pitch: // Source.pitch
mov edx,dword ptr [offset _null]{}//TexX
@@TexX:
shr edx,16
and edx,$11111111{} @@MaskX: // Source.WidthMask
mov ebx,edx
shr edx,1
and ebx,1
movzx eax,byte ptr [esi+edx+$11111111]
@@Bits: // Source.Bits
and eax,dword ptr [offset Mask4+ebx*4]
push ecx
mov ecx,dword ptr [offset Shift4+ebx*4]
shr eax,cl
pop ecx
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskY }
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Pitch }
mov eax,Source; mov eax,[eax + TDXR_Surface.Pitch]
mov edx,offset @@Pitch-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end;
8: begin
if Source.pitch=(1 shl Source.PitchBit) then
begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}@@TexY: //TexY
mov edx,dword ptr [offset _null]{}@@TexX: //TexX
shr esi,$11{} @@YShift: // 16-Source.PitchBit
shr edx,16
and esi,$11111111{} @@MaskY: // Source.HeightMask shl Source.PitchBit
and edx,$11111111{} @@MaskX: // Source.WidthMask
movzx eax,byte ptr [$11111111+esi+edx]
@@Bits: // Source.Bits
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@YShift }
push ebx
mov eax,16
mov ebx,Source; sub eax,[ebx + TDXR_Surface.PitchBit]
pop ebx
mov edx,offset @@YShift-1
sub edx,offset @@StartCode
mov byte ptr [ecx+edx],al
{ @@MaskY }
push ecx
mov ecx,Source; mov ecx,[ecx + TDXR_Surface.PitchBit]
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
shl eax,cl
pop ecx
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end else
if -Source.pitch=(1 shl Source.PitchBit) then
begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}@@TexY: //TexY
mov edx,dword ptr [offset _null]{}@@TexX: //TexX
shr esi,$11{} @@YShift: // 16-Source.PitchBit
shr edx,16
and esi,$11111111{} @@MaskY: // Source.HeightMask shl Source.PitchBit
and edx,$11111111{} @@MaskX: // Source.WidthMask
neg esi
movzx eax,byte ptr [$11111111+esi+edx]
@@Bits: // Source.Bits
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@YShift }
push ebx
mov eax,16
mov ebx,Source; sub eax,[ebx + TDXR_Surface.PitchBit]
pop ebx
mov edx,offset @@YShift-1
sub edx,offset @@StartCode
mov byte ptr [ecx+edx],al
{ @@MaskY }
push ecx
mov ecx,Source; mov ecx,[ecx + TDXR_Surface.PitchBit]
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
shl eax,cl
pop ecx
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
end;
end else
begin
asm
jmp @@EndCode
@@StartCode:
mov esi,dword ptr [offset _null]{}@@TexY: //TexY
mov edx,dword ptr [offset _null]{}@@TexX: //TexX
shr esi,16
shr edx,16
and esi,$11111111{} @@MaskY: // Source.HeightMask
and edx,$11111111{} @@MaskX: // Source.WidthMask
imul esi,$11111111{}@@Pitch: // Source.pitch
movzx eax,byte ptr [esi+edx+$11111111]
@@Bits: // Source.Bits
@@EndCode:
{$I DXRender.inc}
{ @@TexX }
mov eax,Axis; add eax,TDXRMachine_Axis.X
mov edx,offset @@TexX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@TexY }
mov eax,Axis; add eax,TDXRMachine_Axis.Y
mov edx,offset @@TexY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskY }
mov eax,Source; mov eax,[eax + TDXR_Surface.HeightMask]
mov edx,offset @@MaskY-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Pitch }
mov eax,Source; mov eax,[eax + TDXR_Surface.Pitch]
mov edx,offset @@Pitch-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@MaskX }
mov eax,Source; mov eax,[eax + TDXR_Surface.WidthMask]
mov edx,offset @@MaskX-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
{ @@Bits }
mov eax,Source; mov eax,[eax + TDXR_Surface.Bits]
mov edx,offset @@Bits-4
sub edx,offset @@StartCode
mov dword ptr [ecx+edx],eax
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -