⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dxrender.pas

📁 原版翎风(LF)引擎(M2)源码(Delphi)
💻 PAS
📖 第 1 页 / 共 5 页
字号:
           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 + -