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

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

?? dxrender.pas

?? 傳奇源代碼的delphi版本
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
          end;
        DXR_BLEND_SRCALPHA1:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [];
            Col2_2 := [];
          end;
        DXR_BLEND_SRCALPHA1_ADD_ONE2:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;
        DXR_BLEND_ONE2_SUB_SRCALPHA1:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;
        DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;
        DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;

        DXR_BLEND_DECAL:
          begin
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
            Col1_2 := [];
            Col2_1 := [];
            Col2_2 := [];
          end;
        DXR_BLEND_DECALALPHA:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [];
            Col2_1 := [];
            Col2_2 := [chAlpha];
          end;
        DXR_BLEND_MODULATE:
          begin
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
            Col1_2 := [];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;
        DXR_BLEND_MODULATEALPHA:
          begin
            Col1_1 := [chRed, chGreen, chBlue];
            Col1_2 := [chAlpha];
            Col2_1 := [chRed, chGreen, chBlue];
            Col2_2 := [chAlpha];
          end;
        DXR_BLEND_ADD:
          begin
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
            Col1_2 := [];
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
            Col2_2 := [];
          end;
      end;
    end;

  var
    c: TDXRColorChannels;
    Col1_1, Col1_2, Col2_1, Col2_2: TDXRColorChannels;
  begin
    case Tree.Typ of
      DXR_TREETYPE_LOADBLACK:
          begin
            // Load black color
          end;
      DXR_TREETYPE_LOADCOLOR:
          begin
            // Load color
          end;
      DXR_TREETYPE_LOADTEXTURE:
          begin
            // Load texel
          end;
      DXR_TREETYPE_LOADBUMPTEXTURE:
          begin
            // Load texel with Bump mapping
          end;
      DXR_TREETYPE_LOADDESTPIXEL:
          begin
            // Load dest pixel
          end;
      DXR_TREETYPE_BLEND:
          begin
            // Blend color
            GetBlendChannels(Tree.Blend, Col1_1, Col1_2, Col2_1, Col2_2);

            Tree.BlendTree1.Channels := Tree.Channels*Col1_1+Col1_2;
            Tree.BlendTree2.Channels := Tree.Channels*Col2_1+Col2_2;

            OptimizeTree(Tree.BlendTree1);
            OptimizeTree(Tree.BlendTree2);

            if (Tree.Blend=DXR_BLEND_ZERO) then
            begin
              c := Tree.Channels; Tree^.Typ := DXR_TREETYPE_LOADBLACK; Tree.Channels := c;
            end else
            if (Tree.Blend in [DXR_BLEND_ONE1, DXR_BLEND_DECAL]) then
            begin
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
            end else
            if (Tree.Blend=DXR_BLEND_ONE2) then
            begin
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
            end else
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
              (Tree.BlendTree2.Typ=DXR_TREETYPE_LOADBLACK) then
            begin
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
            end else
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
              (Tree.BlendTree1.Typ=DXR_TREETYPE_LOADBLACK) then
            begin
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
            end else
            begin
              if (Col1_1=[]) and (Col1_2=[]) then Tree.BlendTree1 := nil;
              if (Col2_1=[]) and (Col2_2=[]) then Tree.BlendTree2 := nil;
            end;
          end;
    end;
  end;

  procedure GetEnableChannels(Tree: PDXRMachine_Tree);
  begin
    case Tree.Typ of
      DXR_TREETYPE_LOADBLACK:
          begin
            // Load black color
          end;
      DXR_TREETYPE_LOADCOLOR:
          begin
            // Load color
            ColorList[Tree.Color].Channels := ColorList[Tree.Color].Channels + Tree.Channels;
            ColorList[Tree.Color].Enable := ColorList[Tree.Color].Channels<>[];
          end;
      DXR_TREETYPE_LOADTEXTURE:
          begin
            // Load texel
            TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
              Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
            TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
          end;
      DXR_TREETYPE_LOADBUMPTEXTURE:
          begin
            // Load texel with Bump mapping
            TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
              Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
            TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
            TextureList[Tree.BumpTexture].Enable := True;
          end;
      DXR_TREETYPE_LOADDESTPIXEL:
          begin
            // Load dest pixel
          end;
      DXR_TREETYPE_BLEND:
          begin
            // Blend color
            if Tree.BlendTree1<>nil then GetEnableChannels(Tree.BlendTree1);
            if Tree.BlendTree2<>nil then GetEnableChannels(Tree.BlendTree2);
          end;
    end;
  end;

var
  Code: Pointer;
  i: Integer;
begin
  {  Optimize tree  }
  Tree.Channels := GetSurfaceChannels(Dest^);
  OptimizeTree(Tree);

  {  Get enable channels  }
  GetEnableChannels(Tree);

  for i:=Low(ColorList) to High(ColorList) do
    if ColorList[i].Enable then
    begin
      ColorIndex[ColorIndexCount] := i;
      Inc(ColorIndexCount);
    end;

  for i:=Low(TextureList) to High(TextureList) do
    if TextureList[i].Enable then
    begin
      TextureIndex[TextureIndexCount] := i;
      Inc(TextureIndexCount);
    end;

  ZBuffer.Enable := ZBuffer.Surface<>nil;

  RHW.Enable := ZBuffer.Enable;
  Axis.IncEnable := Dither.Enable;

  {  Generate X86 code  }
  Code := FBuf; GenerateCode(Code, Tree);

  FCompiled := True;
end;

const
  Mask1: array[0..7] of DWORD= ($80, $40, $20, $10, $08, $04, $02, $01);
  Mask2: array[0..3] of DWORD= ($C0, $30, $0C, $03);
  Mask4: array[0..1] of DWORD= ($F0, $0F);

  Shift1: array[0..7] of DWORD= (7, 6, 5, 4, 3, 2, 1, 0);
  Shift2: array[0..3] of DWORD= (6, 4, 2, 0);
  Shift4: array[0..1] of DWORD= (4, 0);

var
  _null: Byte;

  // Saturation addition table
  //   Result := Min(n+j, 255)
  _AddTable: array[0..256*2-1] of Byte;
  _SubTable: array[-255..255] of Byte;

  // Byte to QWORD convert table
  //   Result := (n shl 56)+(n shl 48)+(n shl 32)+(n shl 24)+(n shl 16)+(n shl 8)+n
  _ByteToQWORDTable: array[0..255, 0..3] of WORD;

  _BlackColor: TDXRMachine_Color = (R: 0; G: 0; B: 0; A: 0);

procedure Init;
var
  i: Integer;
begin
  for i:=Low(_AddTable) to High(_AddTable) do
  begin
    if i>255 then
      _AddTable[i] := 255
    else
      _AddTable[i] := i;
  end;

  for i:=Low(_SubTable) to High(_SubTable) do
  begin
    if i<0 then
      _SubTable[i] := 0
    else
      _SubTable[i] := i;
  end;

  for i:=0 to 255 do
  begin
    _ByteToQWORDTable[i, 0] := i;
    _ByteToQWORDTable[i, 1] := i;
    _ByteToQWORDTable[i, 2] := i;
    _ByteToQWORDTable[i, 3] := i;
  end;
end;

procedure TDXRMachine.GenerateCode(var Code: Pointer; Tree: PDXRMachine_Tree);
var
  SkipAddress: Pointer;

  procedure genCmpFunc(var Code: Pointer; Func: TDXR_CmpFunc; JmpAdress: Pointer);

    procedure genShortJmp(var Code: Pointer; JmpCode: Pointer; sC: Byte);
    type
      PShortJmp = ^TShortJmp;
      TShortJmp = packed record
        c: Byte;
        A: ShortInt;
      end;
    begin
      with PShortJmp(Code)^ do
      begin
        c := sC;
        A := Integer(JmpCode)-(Integer(Code)+2);
      end;
      Inc(Integer(Code), 2);
    end;

    procedure genNearJmp(var Code: Pointer; JmpCode: Pointer; nC: Byte);
    type
      PNearJmp = ^TNearJmp;
      TNearJmp = packed record
        c: Byte;
        A: Integer;
      end;
    begin
      with PNearJmp(Code)^ do
      begin
        c := nC;
        A := Integer(JmpCode)-(Integer(Code)+5);
      end;
      Inc(Integer(Code), 5);
    end;

    procedure genNearJmp2(var Code: Pointer; JmpCode: Pointer; nC1, nC2: Byte);
    type
      PNearJmp2 = ^TNearJmp2;
      TNearJmp2 = packed record
        c1, c2: Byte;
        A: Integer;
      end;
    begin
      with PNearJmp2(Code)^ do
      begin
        c1 := nC1;
        c2 := nC2;
        A := Integer(JmpCode)-(Integer(Code)+6);
      end;
      Inc(Integer(Code), 6);
    end;

    procedure genFlagJmp(var Code: Pointer; JmpCode: Pointer; sC, nC1, nC2: Byte);
    var
      i: Integer;
    begin
      i := Integer(JmpCode)-(Integer(Code)+2);
      if abs(i)<128 then
        genShortJmp(Code, JmpCode, sC)
      else
        genNearJmp2(Code, JmpCode, nC1, nC2);
    end;

    procedure genJmp(var Code: Pointer; JmpCode: Pointer);
    var
      i: Integer;
    begin
      i := Integer(JmpCode)-(Integer(Code)+2);
      if abs(i)<128 then
        genShortJmp(Code, JmpCode, $EB)
      else
        genNearJmp(Code, JmpCode, $E9);
    end;

  begin
    case Func of
      DXR_CMPFUNC_NEVER:
          begin
            {  if (False) then Jump }
          end;
      DXR_CMPFUNC_LESS:
          begin
            {  if (New<Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $7C, $0F, $8C);
          end;
      DXR_CMPFUNC_EQUAL:
          begin
            {  if (New=Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $74, $0F, $84);
          end;
      DXR_CMPFUNC_LESSEQUAL:
          begin
            {  if (New<=Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $7E, $0F, $8E);
          end;
      DXR_CMPFUNC_GREATER:
          begin
            {  if (New>Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $7F, $0F, $8F);
          end;
      DXR_CMPFUNC_NOTEQUAL:
          begin
            {  if (New<>Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $75, $0F, $85);
          end;
      DXR_CMPFUNC_GREATEREQUAL:
          begin
            {  if (New>=Old) then Jump  }
            genFlagJmp(Code, JmpAdress, $7D, $0F, $8D);
          end;
      DXR_CMPFUNC_ALWAYS:
          begin
            {  if (True) then Break }
            genJmp(Code, JmpAdress);
          end;
    end;
  end;

  procedure genInitDestAddress(var Code: Pointer);
  var
    _Axis: Pointer;
    ByteCount, Pitch: DWORD;
    Bits: Pointer;
  begin
    _Axis := @Axis.Axis;

    ByteCount := Dest.BitCount shr 3;
    Pitch := Dest.pitch;
    Bits := Dest.Bits;

    asm
      jmp @@EndCode
    @@StartCode:
      mov eax,dword ptr [offset _null]{}@@AxisX:
      imul eax,$11{}        @@ByteCount: // Dest.BitCount div 8
      mov edi,dword ptr [offset _null]{}@@AxisY:
      imul edi,$11111111{}  @@Pitch: // Dest.pitch
      add edi,$11111111{}   @@Bits:  // Dest.Bits
      add edi,eax
    @@EndCode:
      {$I DXRender.inc}
      {  @@AxisX  }
      mov eax,_Axis; add eax,TDXRMachine_Axis.X
      mov edx,offset @@AxisX-4
      sub edx,offset @@StartCode
      mov dword ptr [ecx+edx],eax

      {  @@AxisY  }
      mov eax,_Axis; add eax,TDXRMachine_Axis.Y
      mov edx,offset @@AxisY-4
      sub edx,offset @@StartCode
      mov dword ptr [ecx+edx],eax

      {  @@ByteCount  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜精品电影| 日韩一区二区三区视频| 婷婷综合另类小说色区| 欧美大片一区二区| 不卡区在线中文字幕| 亚洲精品中文在线影院| 久久久久久电影| 在线一区二区三区做爰视频网站| 蜜臀a∨国产成人精品| 日本一区免费视频| 欧美日韩国产乱码电影| 97久久超碰国产精品| 视频一区二区不卡| 国产精品对白交换视频| 欧美日韩情趣电影| 激情国产一区二区| 亚洲愉拍自拍另类高清精品| 日韩精品一区二区三区在线| 波多野结衣的一区二区三区| 亚洲欧美国产77777| 国产亚洲欧美一区在线观看| 欧美三级午夜理伦三级中视频| 精品一区二区综合| 亚洲一区二区综合| 精品欧美一区二区在线观看 | 成人激情黄色小说| 免费日本视频一区| 亚洲一区二区三区免费视频| 国产精品乱码人人做人人爱| 日韩欧美在线影院| 欧美在线观看视频一区二区三区| 国产乱人伦精品一区二区在线观看 | 色94色欧美sute亚洲13| 国产一区91精品张津瑜| 日本成人超碰在线观看| 亚洲一区二区av在线| 国产精品毛片大码女人| 久久久久一区二区三区四区| 欧美男男青年gay1069videost| 欧美色涩在线第一页| 99精品欧美一区二区三区小说| 国产毛片一区二区| 美女一区二区视频| 丝袜美腿亚洲色图| 日韩精品午夜视频| 日韩极品在线观看| 午夜精品免费在线| 亚洲va中文字幕| 成人欧美一区二区三区白人| 中文字幕在线观看一区| 国产女主播一区| 国产日韩欧美电影| 久久婷婷一区二区三区| 亚洲精品一区二区三区香蕉| 欧美精品一区二区三区蜜桃 | 91成人免费在线视频| av一区二区不卡| 94色蜜桃网一区二区三区| 韩国中文字幕2020精品| 黑人巨大精品欧美黑白配亚洲| 精品一区二区三区的国产在线播放| 麻豆精品在线看| 久久国产福利国产秒拍| 久久精品72免费观看| 国产激情一区二区三区| 日韩精品久久久久久| 蜜桃久久久久久| 国内精品第一页| 成人午夜又粗又硬又大| 99精品热视频| 色狠狠桃花综合| 欧美乱妇15p| 欧美一区二区三区不卡| 欧美v亚洲v综合ⅴ国产v| 日韩精品自拍偷拍| 国产精品全国免费观看高清 | 一本色道久久综合亚洲aⅴ蜜桃| 91丝袜呻吟高潮美腿白嫩在线观看| 成人午夜精品在线| 久久精品国产第一区二区三区| 国产aⅴ综合色| 欧美日韩国产综合草草| 久久久久久久久久久久电影| 亚洲精选视频免费看| 久久国产精品色婷婷| 91久久一区二区| 2024国产精品| 婷婷一区二区三区| 成人一区二区三区在线观看 | 国产日产欧美精品一区二区三区| 一区二区三区在线观看欧美| 久久国产尿小便嘘嘘| 91久久精品日日躁夜夜躁欧美| 精品欧美一区二区在线观看 | 国产精品亚洲综合一区在线观看| 在线一区二区三区| 国产嫩草影院久久久久| 天堂一区二区在线| 91麻豆免费在线观看| www激情久久| 日本午夜一本久久久综合| 91麻豆文化传媒在线观看| 久久久噜噜噜久久中文字幕色伊伊| 一区二区三区在线观看国产| 国产**成人网毛片九色| 日韩欧美国产三级电影视频| 亚洲综合成人在线| 99久久综合国产精品| 精品国产电影一区二区| 丝袜诱惑制服诱惑色一区在线观看| 99国产一区二区三精品乱码| 久久精品综合网| 国产一区二区主播在线| 91精品在线免费观看| 一区二区欧美国产| 色综合亚洲欧洲| 亚洲日穴在线视频| 成人性生交大合| 国产欧美视频一区二区| 国内久久婷婷综合| 日韩无一区二区| 天天综合天天综合色| 欧美色图12p| 亚洲国产精品一区二区久久| 色噜噜久久综合| 亚洲精品免费看| 成人激情黄色小说| 中文字幕日韩av资源站| 丁香婷婷综合五月| 欧美激情一区三区| 成人av免费在线| 国产精品久久久久aaaa樱花| 国产99久久久精品| 亚洲国产成人私人影院tom| 国产传媒欧美日韩成人| 国产欧美日韩久久| 99综合电影在线视频| 中文字幕一区在线观看| a美女胸又www黄视频久久| 亚洲图片另类小说| 在线亚洲高清视频| 亚洲成人av电影在线| 欧美日韩1234| 久久国产成人午夜av影院| 久久综合狠狠综合| 国产成人aaa| 中文字幕一区视频| 色av成人天堂桃色av| 亚洲香肠在线观看| 欧美一级日韩一级| 国产在线看一区| 国产精品拍天天在线| 91看片淫黄大片一级在线观看| 亚洲男女一区二区三区| 欧美日本在线一区| 麻豆成人在线观看| 国产日韩欧美a| 色婷婷综合五月| 天天综合网 天天综合色| 精品日产卡一卡二卡麻豆| 成人动漫视频在线| 一区二区免费在线| 日韩欧美国产电影| 成年人午夜久久久| 日韩中文字幕亚洲一区二区va在线| 精品日韩一区二区| 91免费视频大全| 青青草91视频| ㊣最新国产の精品bt伙计久久| 欧美视频第二页| 国产最新精品精品你懂的| 国产精品久久久久aaaa| 欧美日韩亚洲另类| 国产成人aaa| 偷拍与自拍一区| 国产欧美日韩精品一区| 日本韩国欧美一区| 极品美女销魂一区二区三区| 国产精品久久二区二区| 欧美一区二区三区四区视频| 国产精品中文欧美| 天天综合色天天综合| 国产精品夫妻自拍| 精品美女在线观看| 欧美在线三级电影| 国产成人精品免费看| 午夜激情一区二区三区| 欧美激情一区二区三区| 911精品国产一区二区在线| 成人免费av网站| 蜜桃av噜噜一区| 亚洲一区在线观看视频| 国产欧美日韩在线观看| 91精品欧美久久久久久动漫| 成人a级免费电影| 国产尤物一区二区在线| 亚洲va国产天堂va久久en| 国产精品盗摄一区二区三区| 精品欧美一区二区久久| 欧美日韩在线播|