Subversion Repositories spacemission

Rev

Rev 1 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1 Rev 4
Line 3... Line 3...
3
interface
3
interface
4
 
4
 
5
{$INCLUDE DelphiXcfg.inc}
5
{$INCLUDE DelphiXcfg.inc}
6
 
6
 
7
uses
7
uses
8
  Windows, DirectX;
8
  Windows,
-
 
9
{$IfDef StandardDX}
-
 
10
  DirectDraw,
-
 
11
  {$ifdef DX7}
-
 
12
  Direct3D;
-
 
13
  {$endif}
-
 
14
  {$IfDef DX9}
-
 
15
  Direct3D9, Direct3D, D3DX9, {Direct3D8,} DX7toDX8;
-
 
16
  {$EndIf}
-
 
17
{$Else}
-
 
18
  DirectX;
-
 
19
{$EndIf}
9
 
20
 
10
const
21
const
11
  DXR_MAXTEXTURE = 4;
22
  DXR_MAXTEXTURE = 4;
12
 
23
 
13
type
24
type
14
  TDXR_Value = Double;
25
  TDXR_Value = Double;
15
 
26
 
16
  TDXR_Color = DWORD;
27
  TDXR_Color = DWORD;
17
  TDXR_SurfaceColor = DWORD;
28
  TDXR_SurfaceColor = DWORD;
18
 
29
 
-
 
30
  {  TDXR_Option  }
-
 
31
 
-
 
32
  PDXR_Option = ^TDXR_Option;
-
 
33
  TDXR_Option = (
-
 
34
    DXR_OPTION_VERSION,
-
 
35
    DXR_OPTION_MMXENABLE,
-
 
36
    DXR_OPTION_RENDERPRIMITIVES
-
 
37
  );                            
-
 
38
 
19
  {  TDXR_ShadeMode  }
39
  {  TDXR_ShadeMode  }
20
 
40
 
21
  TDXR_ShadeMode = (
41
  TDXR_ShadeMode = (
22
    DXR_SHADEMODE_FLAT,
42
    DXR_SHADEMODE_FLAT,
23
    DXR_SHADEMODE_GOURAUD
43
    DXR_SHADEMODE_GOURAUD
Line 32... Line 52...
32
    DXR_BLEND_ONE2,                        // r=c2
52
    DXR_BLEND_ONE2,                        // r=c2
33
    DXR_BLEND_ONE1_ADD_ONE2,               // r=c1+c2
53
    DXR_BLEND_ONE1_ADD_ONE2,               // r=c1+c2
34
    DXR_BLEND_ONE1_SUB_ONE2,               // r=c1-c2
54
    DXR_BLEND_ONE1_SUB_ONE2,               // r=c1-c2
35
    DXR_BLEND_ONE2_SUB_ONE1,               // r=c2-c1
55
    DXR_BLEND_ONE2_SUB_ONE1,               // r=c2-c1
36
    DXR_BLEND_ONE1_MUL_ONE2,               // r=c1*c2
56
    DXR_BLEND_ONE1_MUL_ONE2,               // r=c1*c2
37
 
-
 
38
    DXR_BLEND_SRCALPHA1,                   // r=c1*a1
57
    DXR_BLEND_SRCALPHA1,                   // r=c1*a1
39
    DXR_BLEND_SRCALPHA1_ADD_ONE2,          // r=c1*a1+c2
58
    DXR_BLEND_SRCALPHA1_ADD_ONE2,          // r=c1*a1+c2
40
    DXR_BLEND_ONE2_SUB_SRCALPHA1,          // r=c2-c1*a1
59
    DXR_BLEND_ONE2_SUB_SRCALPHA1,          // r=c2-c1*a1
41
    DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2,  // r=c1*a1+c2*(1-a2)
60
    DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2,  // r=c1*a1+c2*(1-a2)
42
    DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2,  // r=c1*(1-a1)+c2*a2
61
    DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2,  // r=c1*(1-a1)+c2*a2
43
    // for lighting
62
    // for lighting
-
 
63
    DXR_BLEND_DECAL,                       // r=c1
44
    DXR_BLEND_DECALALPHA,                  // r=c1    ra=a2
64
    DXR_BLEND_DECALALPHA,                  // r=c1    ra=a2
45
    DXR_BLEND_MODULATE,                    // r=c1*c2 ra=a2
65
    DXR_BLEND_MODULATE,                    // r=c1*c2 ra=a2
-
 
66
    DXR_BLEND_MODULATEALPHA,               // r=c1*c2
46
    DXR_BLEND_ADD                          // r=c1+c2 ra=a2
67
    DXR_BLEND_ADD                          // r=c1+c2 ra=a2
47
  );
68
  );
48
 
69
 
49
  {  TDXR_TextureFilter  }
70
  {  TDXR_TextureFilter  }
50
 
71
 
51
  TDXR_TextureFilter = (
72
  TDXR_TextureFilter = (
52
    DXR_TEXTUREFILTER_NEAREST,
73
    DXR_TEXTUREFILTER_NEAREST,
53
    DXR_TEXTUREFILTER_LINEAR
74
    DXR_TEXTUREFILTER_LINEAR,
-
 
75
    DXR_TEXTUREFILTER_MIPMAP_NEAREST,
-
 
76
    DXR_TEXTUREFILTER_MIPMAP_LINEAR
54
  );
77
  );
55
 
78
 
56
  {  TDXR_TextureAddress  }
79
  {  TDXR_TextureAddress  }
57
 
80
 
58
  TDXR_TextureAddress = (
81
  TDXR_TextureAddress = (
59
    DXR_TEXTUREADDRESS_TILE,           // tx=tx and WidthMask ty=ty and HeightMask
82
    DXR_TEXTUREADDRESS_TILE,           // tx=tx and WidthMask ty=ty and HeightMask
60
    DXR_TEXTUREADDRESS_DONOTCLIP       // tx=tx               ty=ty
83
    DXR_TEXTUREADDRESS_DONOTCLIP       // tx=tx               ty=ty
61
  );
84
  );
62
 
85
 
-
 
86
  {  TDXR_CmpFunc  }
-
 
87
 
-
 
88
  TDXR_CmpFunc = (
-
 
89
    DXR_CMPFUNC_NEVER,
-
 
90
    DXR_CMPFUNC_LESS,
-
 
91
    DXR_CMPFUNC_EQUAL,
-
 
92
    DXR_CMPFUNC_LESSEQUAL,
-
 
93
    DXR_CMPFUNC_GREATER,
-
 
94
    DXR_CMPFUNC_NOTEQUAL,
-
 
95
    DXR_CMPFUNC_GREATEREQUAL,
-
 
96
    DXR_CMPFUNC_ALWAYS
-
 
97
  );
-
 
98
 
63
  {  TDXR_ColorType  }
99
  {  TDXR_ColorType  }
64
 
100
 
65
  TDXR_ColorType = (
101
  TDXR_ColorType = (
66
    DXR_COLORTYPE_INDEXED,     // Palette indexed color
102
    DXR_COLORTYPE_INDEXED,     // Palette indexed color
67
    DXR_COLORTYPE_RGB          // RGB color
103
    DXR_COLORTYPE_RGB          // RGB color
Line 87... Line 123...
87
    WidthMask, HeightMask: DWORD;// Bit Mask of size of surface
123
    WidthMask, HeightMask: DWORD;// Bit Mask of size of surface
88
    BitCount: DWORD;             // BitCount per Pixel(1, 2, 4, 8, 16, 24, 32 only)
124
    BitCount: DWORD;             // BitCount per Pixel(1, 2, 4, 8, 16, 24, 32 only)
89
    Bits: Pointer;               // Pointer to pixeldata(x:0 y:0)
125
    Bits: Pointer;               // Pointer to pixeldata(x:0 y:0)
90
    Pitch: Integer;              // Offset of next scanline
126
    Pitch: Integer;              // Offset of next scanline
91
    PitchBit: Integer;           // Offset of next scanline (Number of bit)
127
    PitchBit: Integer;           // Offset of next scanline (Number of bit)
-
 
128
    MipmapChain: PDXR_Surface;
92
    case Integer of
129
    case Integer of
93
      0: (
130
      0: (
94
        { Indexed color }
131
        { Indexed color }
95
        idx_index: TDXR_ColorChannel;  // Index channel
132
        idx_index: TDXR_ColorChannel;  // Index channel
96
        idx_alpha: TDXR_ColorChannel;  // Alpha channel
133
        idx_alpha: TDXR_ColorChannel;  // Alpha channel
Line 111... Line 148...
111
  PDXR_Vertex = ^TDXR_Vertex;
148
  PDXR_Vertex = ^TDXR_Vertex;
112
  TDXR_Vertex = record
149
  TDXR_Vertex = record
113
    sx: TDXR_Value;            // Screen coordinates
150
    sx: TDXR_Value;            // Screen coordinates
114
    sy: TDXR_Value;
151
    sy: TDXR_Value;
115
    sz: TDXR_Value;
152
    sz: TDXR_Value;
-
 
153
    rhw: TDXR_Value;           // 1/sz
116
    color: TDXR_Color;
154
    color: TDXR_Color;
117
    specular: TDXR_Color;
155
    specular: TDXR_Color;
118
    tu, tv: array[0..DXR_MAXTEXTURE-1] of TDXR_Value;
156
    tu, tv: array[0..DXR_MAXTEXTURE-1] of TDXR_Value;
119
  end;
157
  end;
120
 
158
 
Line 143... Line 181...
143
    LayerBlend: TDXR_TextureLayerBlend;
181
    LayerBlend: TDXR_TextureLayerBlend;
144
    Blend: TDXR_Blend;
182
    Blend: TDXR_Blend;
145
    ColorKeyEnable: Boolean;
183
    ColorKeyEnable: Boolean;
146
    ColorKey: TDXR_SurfaceColor;
184
    ColorKey: TDXR_SurfaceColor;
147
    TextureAddress: TDXR_TextureAddress;
185
    TextureAddress: TDXR_TextureAddress;
-
 
186
    BumpTexture: Integer;
148
  end;
187
  end;
149
 
188
 
150
  {  TDXR_Cull  }
189
  {  TDXR_Cull  }
151
 
190
 
152
  TDXR_Cull = (
191
  TDXR_Cull = (
Line 165... Line 204...
165
    TexBlend: TDXR_Blend;
204
    TexBlend: TDXR_Blend;
166
    Blend: TDXR_Blend;
205
    Blend: TDXR_Blend;
167
    TextureEnable: Boolean;
206
    TextureEnable: Boolean;
168
    TextureList: array[0..DXR_MAXTEXTURE-1] of TDXR_TextureLayer;
207
    TextureList: array[0..DXR_MAXTEXTURE-1] of TDXR_TextureLayer;
169
    TextureFilter: TDXR_TextureFilter;
208
    TextureFilter: TDXR_TextureFilter;
-
 
209
    ZBuffer: PDXR_Surface;
-
 
210
    ZFunc: TDXR_CmpFunc;
-
 
211
    ZWriteEnable: Boolean;
170
    EnableDrawLine: DWORD;
212
    EnableDrawLine: Integer;
171
  end;
213
  end;
172
 
214
 
-
 
215
function dxrGetOption(Option: TDXR_Option): DWORD;
-
 
216
procedure dxrSetOption(Option: TDXR_Option; Value: DWORD);
-
 
217
 
173
procedure dxrMakeIndexedSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
218
procedure dxrMakeIndexedSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
174
  Bits: Pointer; pitch: Integer; idx_index, idx_alpha: DWORD);
219
  Bits: Pointer; pitch: Integer; idx_index, idx_alpha: DWORD);
175
procedure dxrMakeRGBSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
220
procedure dxrMakeRGBSurface(var Surface: TDXR_Surface; Width, Height, BitCount: DWORD;
176
  Bits: Pointer; pitch: Integer; rgb_red, rgb_green, rgb_blue, rgb_alpha: DWORD);
221
  Bits: Pointer; pitch: Integer; rgb_red, rgb_green, rgb_blue, rgb_alpha: DWORD);
177
function dxrScanLine(const Surface: TDXR_Surface; y: DWORD): Pointer;
222
function dxrScanLine(const Surface: TDXR_Surface; y: DWORD): Pointer;
-
 
223
procedure dxrZBufferClear(const Surface: TDXR_Surface);
178
 
224
 
179
function dxrDDSurfaceLock(DDSurface: IDirectDrawSurface; var Surface: TDXR_Surface): Boolean;
225
function dxrDDSurfaceLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var Surface: TDXR_Surface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
180
function dxrDDSurfaceLock2(DDSurface: IDirectDrawSurface; var ddsd: TDDSurfaceDesc;
226
function dxrDDSurfaceLock2(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
181
  var Surface: TDXR_Surface): Boolean;
227
  var Surface: TDXR_Surface): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
182
procedure dxrDDSurfaceUnLock(DDSurface: IDirectDrawSurface; const Surface: TDXR_Surface);
228
procedure dxrDDSurfaceUnLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; const Surface: TDXR_Surface); {$IFDEF VER9UP}inline;{$ENDIF}
183
 
229
 
184
procedure dxrDefRenderStates(var States: TDXR_RenderStates);
230
procedure dxrDefRenderStates(var States: TDXR_RenderStates);
185
 
231
 
186
procedure dxrDrawPrimitive(const Dest: TDXR_Surface; const States: TDXR_RenderStates; PrimitiveType: TDXR_PrimitiveType;
232
procedure dxrDrawPrimitive(const Dest: TDXR_Surface; const States: TDXR_RenderStates; PrimitiveType: TDXR_PrimitiveType;
187
  VertexList: PDXR_Vertex; VertexCount: DWORD);
233
  VertexList: PDXR_Vertex; VertexCount: DWORD);
Line 218... Line 264...
218
 
264
               
219
type
265
type
220
 
266
 
221
  PInteger = ^Integer;
267
  PInteger = ^Integer;
222
 
268
 
223
  {  TDXR_CmpFunc  }
-
 
224
 
-
 
225
  TDXR_CmpFunc = (
-
 
226
    DXR_CMPFUNC_NEVER,
-
 
227
    DXR_CMPFUNC_LESS,
-
 
228
    DXR_CMPFUNC_EQUAL,
-
 
229
    DXR_CMPFUNC_LESSEQUAL,
-
 
230
    DXR_CMPFUNC_GREATER,
-
 
231
    DXR_CMPFUNC_NOTEQUAL,
-
 
232
    DXR_CMPFUNC_GREATEREQUAL,
-
 
233
    DXR_CMPFUNC_ALWAYS
-
 
234
  );
-
 
235
 
-
 
236
  {  TDXRMachine  }
269
  {  TDXRMachine  }
237
 
270
 
238
  TDXRMachine_TreeType = (
271
  TDXRMachine_TreeType = (
239
    DXR_TREETYPE_LOADBLACK,      // Load black color
272
    DXR_TREETYPE_LOADBLACK,      // Load black color
240
    DXR_TREETYPE_LOADCOLOR,      // Load vertex color
273
    DXR_TREETYPE_LOADCOLOR,      // Load vertex color
241
    DXR_TREETYPE_LOADCONSTCOLOR, // Load constant color
274
    DXR_TREETYPE_LOADCONSTCOLOR, // Load constant color
242
    DXR_TREETYPE_LOADTEXTURE,    // Load texel
275
    DXR_TREETYPE_LOADTEXTURE,    // Load texel
-
 
276
    DXR_TREETYPE_LOADBUMPTEXTURE,// Load texel with Bump mapping
-
 
277
                                 //   dx := nx + (BumpTexture[nx-1, ny]-BumpTexture[nx+1, ny]);
-
 
278
                                 //   dy := ny + (BumpTexture[nx, ny-1]-BumpTexture[nx, ny+1]);
243
    DXR_TREETYPE_LOADDESTPIXEL,  // Load dest pixel
279
    DXR_TREETYPE_LOADDESTPIXEL,  // Load dest pixel
244
    DXR_TREETYPE_BLEND           // Blend color
280
    DXR_TREETYPE_BLEND           // Blend color
245
  );
281
  );
246
 
282
 
247
  TDXRColorChannel = (chRed, chGreen, chBlue, chAlpha);
283
  TDXRColorChannel = (chRed, chGreen, chBlue, chAlpha);
Line 282... Line 318...
282
    EnableChannels: TDXRColorChannels;
318
    EnableChannels: TDXRColorChannels;
283
    TextureAddress: TDXR_TextureAddress;
319
    TextureAddress: TDXR_TextureAddress;
284
    DefaultColor: TDXRMachine_Color;
320
    DefaultColor: TDXRMachine_Color;
285
  end;
321
  end;
286
 
322
 
-
 
323
  TDXRMachine_Reg_RHW = record
-
 
324
    Enable: Boolean;
-
 
325
    nRHW: TDXRMachine_Int64;
-
 
326
    iRHW: TDXRMachine_Int64;
-
 
327
  end;
-
 
328
 
287
  TDXRMachine_Reg_Dither = record
329
  TDXRMachine_Reg_Dither = record
288
    Enable: Boolean;
330
    Enable: Boolean;
289
  end;
331
  end;
290
 
332
 
-
 
333
  TDXRMachine_Reg_ZBuffer = record
-
 
334
    Enable: Boolean;
-
 
335
    Surface: PDXR_Surface;
-
 
336
    CmpFunc: TDXR_CmpFunc;
-
 
337
    WriteEnable: Boolean;
-
 
338
  end;
-
 
339
 
291
  TDXRMachine_Reg_Axis = record
340
  TDXRMachine_Reg_Axis = record
292
    Axis: TDXRMachine_Axis;
341
    Axis: TDXRMachine_Axis;
293
    IncEnable: Boolean;
342
    IncEnable: Boolean;
294
  end;
343
  end;
295
 
344
 
Line 307... Line 356...
307
        ConstColor: TDXRMachine_Color;
356
        ConstColor: TDXRMachine_Color;
308
        );
357
        );
309
      DXR_TREETYPE_LOADTEXTURE: (
358
      DXR_TREETYPE_LOADTEXTURE: (
310
        Texture: Integer
359
        Texture: Integer
311
        );
360
        );
-
 
361
      DXR_TREETYPE_LOADBUMPTEXTURE: (
-
 
362
        _Texture: Integer;
-
 
363
        BumpTexture: Integer;
-
 
364
        );
312
      DXR_TREETYPE_LOADDESTPIXEL: (
365
      DXR_TREETYPE_LOADDESTPIXEL: (
313
        );
366
        );
314
      DXR_TREETYPE_BLEND: (
367
      DXR_TREETYPE_BLEND: (
315
        Blend: TDXR_Blend;
368
        Blend: TDXR_Blend;
316
        BlendTree1: PDXRMachine_Tree;
369
        BlendTree1: PDXRMachine_Tree;
Line 324... Line 377...
324
    FCall: Pointer;
377
    FCall: Pointer;
325
    FCompiled: Boolean;
378
    FCompiled: Boolean;
326
    FTreeCount: Integer;
379
    FTreeCount: Integer;
327
    FTreeList: array[0..127] of TDXRMachine_Tree;
380
    FTreeList: array[0..127] of TDXRMachine_Tree;
328
    FMMXUsed: Boolean;
381
    FMMXUsed: Boolean;
-
 
382
    F_ZBuf: Pointer;
329
    F_BiLinearAxis: TDXRMachine_Axis;
383
    F_BiLinearAxis: TDXRMachine_Axis;
330
    F_BiLinearCol1: TDXRMachine_Color;
384
    F_BiLinearCol1: TDXRMachine_Color;
331
    F_BiLinearCol2: TDXRMachine_Color;
385
    F_BiLinearCol2: TDXRMachine_Color;
332
    F_BiLinearCol3: TDXRMachine_Color;
386
    F_BiLinearCol3: TDXRMachine_Color;
333
    F_BiLinearCol4: TDXRMachine_Color;
387
    F_BiLinearCol4: TDXRMachine_Color;
-
 
388
    F_BumpAxis: TDXRMachine_Axis;
-
 
389
    F_BumpAxis2: TDXRMachine_Axis;
-
 
390
    F_BumpTempCol: DWORD;
334
    FStack: array[0..255] of TDXRMachine_Color;
391
    FStack: array[0..255] of TDXRMachine_Color;
335
    procedure GenerateCode(var Code: Pointer; Tree: PDXRMachine_Tree);
392
    procedure GenerateCode(var Code: Pointer; Tree: PDXRMachine_Tree);
336
  public
393
  public
337
    Dest: PDXR_Surface;
394
    Dest: PDXR_Surface;
338
    ColorList: array[0..7] of TDXRMachine_Reg_Color;
395
    ColorList: array[0..7] of TDXRMachine_Reg_Color;
Line 340... Line 397...
340
    ColorIndexCount: Integer;
397
    ColorIndexCount: Integer;
341
    TextureList: array[0..7] of TDXRMachine_Reg_Texture;
398
    TextureList: array[0..7] of TDXRMachine_Reg_Texture;
342
    TextureIndex: array[0..7] of Integer;
399
    TextureIndex: array[0..7] of Integer;
343
    TextureIndexCount: Integer;
400
    TextureIndexCount: Integer;
344
    Dither: TDXRMachine_Reg_Dither;
401
    Dither: TDXRMachine_Reg_Dither;
-
 
402
    ZBuffer: TDXRMachine_Reg_ZBuffer;
345
    Axis: TDXRMachine_Reg_Axis;
403
    Axis: TDXRMachine_Reg_Axis;
-
 
404
    RHW: TDXRMachine_Reg_RHW;
346
    constructor Create;
405
    constructor Create;
347
    destructor Destroy; override;
406
    destructor Destroy; override;
348
    function CreateTree: PDXRMachine_Tree;
407
    function CreateTree: PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
349
    function CreateTree2(Typ: TDXRMachine_TreeType): PDXRMachine_Tree;
408
    function CreateTree2(Typ: TDXRMachine_TreeType): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
350
    function CreateTree_LoadColor(Color: DWORD): PDXRMachine_Tree;
409
    function CreateTree_LoadColor(Color: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
351
    function CreateTree_LoadConstColor(R, G, B, A: Byte): PDXRMachine_Tree;
410
    function CreateTree_LoadConstColor(R, G, B, A: Byte): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
352
    function CreateTree_LoadTexture(Texture: DWORD): PDXRMachine_Tree;
411
    function CreateTree_LoadTexture(Texture: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
-
 
412
    function CreateTree_LoadBumpTexture(Texture, BumpTexture: DWORD): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
353
    function CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree;
413
    function CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree; {$IFDEF VER9UP}inline;{$ENDIF}
354
    procedure Initialize;
414
    procedure Initialize; {$IFDEF VER9UP}inline;{$ENDIF}
355
    procedure Compile(Tree: PDXRMachine_Tree);
415
    procedure Compile(Tree: PDXRMachine_Tree);
356
    procedure Run(Count: Integer);
416
    procedure Run(Count: Integer);
357
    property Compiled: Boolean read FCompiled write FCompiled;
417
    property Compiled: Boolean read FCompiled write FCompiled;
358
  end;
418
  end;
359
 
419
 
Line 416... Line 476...
416
    mov CPUIDSignature,eax
476
    mov CPUIDSignature,eax
417
    mov CPUIDFeatures,edx
477
    mov CPUIDFeatures,edx
418
  @@exit:
478
  @@exit:
419
    pop ebx
479
    pop ebx
420
  end;
480
  end;
421
 
-
 
422
  UseMMX := CPUIDFeatures and CPUIDF_MMX<>0;
481
  UseMMX := CPUIDFeatures and CPUIDF_MMX<>0;
423
end;
482
end;
424
 
483
 
-
 
484
function dxrGetOption(Option: TDXR_Option): DWORD;
-
 
485
begin
-
 
486
  Result := 0;
-
 
487
  case Option of
-
 
488
    DXR_OPTION_VERSION:
-
 
489
        begin
-
 
490
          Result := 1*100 + 0;
-
 
491
        end;
-
 
492
    DXR_OPTION_MMXENABLE:
-
 
493
        begin
-
 
494
          Result := DWORD(LongBool(UseMMX));
-
 
495
        end;
-
 
496
    DXR_OPTION_RENDERPRIMITIVES:
-
 
497
        begin
-
 
498
          Result := RenderPrimitiveCount;
-
 
499
        end;
-
 
500
  end;
-
 
501
end;
-
 
502
 
-
 
503
procedure dxrSetOption(Option: TDXR_Option; Value: DWORD);
-
 
504
begin
-
 
505
  case Option of
-
 
506
    DXR_OPTION_MMXENABLE:
-
 
507
        begin
-
 
508
          UseMMX := LongBool(Value) and (CPUIDFeatures and CPUIDF_MMX<>0);
-
 
509
        end;
-
 
510
    DXR_OPTION_RENDERPRIMITIVES:
-
 
511
        begin
-
 
512
          RenderPrimitiveCount := Value;
-
 
513
        end;
-
 
514
  end;
-
 
515
end;
-
 
516
 
425
function GetBitCount(B: Integer): DWORD;
517
function GetBitCount(B: Integer): DWORD;
426
begin
518
begin
427
  Result := 31;
519
  Result := 31;
428
  while (Result>0) and (((1 shl Result) and B)=0) do Dec(Result);
520
  while (Result>0) and (((1 shl Result) and B)=0) do Dec(Result);
429
end;
521
end;
Line 536... Line 628...
536
      (Surface1.rgb_alpha.Mask=Surface2.rgb_alpha.Mask);
628
      (Surface1.rgb_alpha.Mask=Surface2.rgb_alpha.Mask);
537
  end else
629
  end else
538
    Result := False;
630
    Result := False;
539
end;
631
end;
540
 
632
 
541
function dxrDDSurfaceLock(DDSurface: IDirectDrawSurface; var Surface: TDXR_Surface): Boolean;
633
function dxrDDSurfaceLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var Surface: TDXR_Surface): Boolean;
542
var
634
var
543
  ddsd: TDDSurfaceDesc;
635
  ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
544
begin
636
begin
545
  Result := dxrDDSurfaceLock2(DDSurface, ddsd, Surface);
637
  Result := dxrDDSurfaceLock2(DDSurface, ddsd, Surface);
546
end;
638
end;
547
 
639
                                                                                   
548
function dxrDDSurfaceLock2(DDSurface: IDirectDrawSurface; var ddsd: TDDSurfaceDesc;
640
function dxrDDSurfaceLock2(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; var ddsd: {$IFDEF D3D_deprecated}TDDSurfaceDesc{$ELSE}TDDSurfaceDesc2{$ENDIF};
549
  var Surface: TDXR_Surface): Boolean;
641
  var Surface: TDXR_Surface): Boolean;
550
const
642
const
551
  DDPF_PALETTEINDEXED = DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
643
  DDPF_PALETTEINDEXED = DDPF_PALETTEINDEXED1 or DDPF_PALETTEINDEXED2 or
552
    DDPF_PALETTEINDEXED4 or DDPF_PALETTEINDEXED8;
644
    DDPF_PALETTEINDEXED4 or DDPF_PALETTEINDEXED8;
553
begin
645
begin
Line 560... Line 652...
560
    begin
652
    begin
561
      dxrMakeIndexedSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
653
      dxrMakeIndexedSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
562
        ddsd.lpSurface, ddsd.lPitch, (1 shl ddsd.ddpfPixelFormat.dwRGBBitCount)-1, 0);
654
        ddsd.lpSurface, ddsd.lPitch, (1 shl ddsd.ddpfPixelFormat.dwRGBBitCount)-1, 0);
563
    end else
655
    end else
564
    begin
656
    begin
565
      {if ddsd.ddpfPixelFormat.dwFlags and DDPF_ALPHAPIXELS<>0 then
657
      if ddsd.ddpfPixelFormat.dwFlags and DDPF_ALPHAPIXELS<>0 then
566
      begin
658
      begin
567
        dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
659
        dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
568
          ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
660
          ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
569
          ddsd.ddpfPixelFormat.dwBBitMask, ddsd.ddpfPixelFormat.dwRGBAlphaBitMask);
661
          ddsd.ddpfPixelFormat.dwBBitMask, ddsd.ddpfPixelFormat.dwRGBAlphaBitMask);
570
      end else}
662
      end else
571
      begin
663
      begin
572
        dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
664
        dxrMakeRGBSurface(Surface, ddsd.dwWidth, ddsd.dwHeight, ddsd.ddpfPixelFormat.dwRGBBitCount,
573
          ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
665
          ddsd.lpSurface, ddsd.lPitch, ddsd.ddpfPixelFormat.dwRBitMask, ddsd.ddpfPixelFormat.dwGBitMask,
574
          ddsd.ddpfPixelFormat.dwBBitMask, 0);
666
          ddsd.ddpfPixelFormat.dwBBitMask, 0);
575
      end;
667
      end;                          
576
    end;
668
    end;
577
  end;
669
  end;
578
end;
670
end;
579
 
671
 
580
procedure dxrDDSurfaceUnLock(DDSurface: IDirectDrawSurface; const Surface: TDXR_Surface);
672
procedure dxrDDSurfaceUnLock(DDSurface: {$IFDEF D3D_deprecated}IDirectDrawSurface{$ELSE}IDirectDrawSurface7{$ENDIF}; const Surface: TDXR_Surface);
581
begin
673
begin
582
  DDSurface.Unlock(Surface.Bits);
674
  DDSurface.Unlock(Surface.Bits);
583
end;
675
end;
584
 
676
 
585
function dxrScanLine(const Surface: TDXR_Surface; y: DWORD): Pointer;
677
function dxrScanLine(const Surface: TDXR_Surface; y: DWORD): Pointer;
586
begin
678
begin
587
  Result := Pointer(Integer(Surface.Bits)+Surface.Pitch*Integer(y));
679
  Result := Pointer(Integer(Surface.Bits)+Surface.Pitch*Integer(y));
588
end;
680
end;
589
 
681
 
-
 
682
procedure dxrZBufferClear(const Surface: TDXR_Surface);
-
 
683
var
-
 
684
  i: Integer;
-
 
685
begin
-
 
686
  for i:=0 to Surface.Height-1 do
-
 
687
    FillChar(dxrScanLine(Surface, i)^, Abs(Surface.Pitch), $FF);
-
 
688
end;
-
 
689
 
590
{  TDXRMachine  }
690
{  TDXRMachine  }
591
 
691
 
592
constructor TDXRMachine.Create;
692
constructor TDXRMachine.Create;
593
begin
693
begin
594
  inherited Create;
694
  inherited Create;
Line 614... Line 714...
614
  FMMXUsed := False;
714
  FMMXUsed := False;
615
 
715
 
616
  FillChar(ColorList, SizeOf(ColorList), 0);
716
  FillChar(ColorList, SizeOf(ColorList), 0);
617
  FillChar(TextureList, SizeOf(TextureList), 0);
717
  FillChar(TextureList, SizeOf(TextureList), 0);
618
  FillChar(Dither, SizeOf(Dither), 0);
718
  FillChar(Dither, SizeOf(Dither), 0);
-
 
719
  FillChar(ZBuffer, SizeOf(ZBuffer), 0);
619
  FillChar(Axis, SizeOf(Axis), 0);
720
  FillChar(Axis, SizeOf(Axis), 0);
-
 
721
  FillChar(RHW, SizeOf(RHW), 0);
620
end;
722
end;
621
 
723
 
622
function TDXRMachine.CreateTree: PDXRMachine_Tree;
724
function TDXRMachine.CreateTree: PDXRMachine_Tree;
623
begin
725
begin
624
  Result := @FTreeList[FTreeCount];
726
  Result := @FTreeList[FTreeCount];
Line 654... Line 756...
654
  Result := CreateTree;
756
  Result := CreateTree;
655
  Result.Typ := DXR_TREETYPE_LOADTEXTURE;
757
  Result.Typ := DXR_TREETYPE_LOADTEXTURE;
656
  Result.Texture := Texture;
758
  Result.Texture := Texture;
657
end;
759
end;
658
 
760
 
-
 
761
function TDXRMachine.CreateTree_LoadBumpTexture(Texture, BumpTexture: DWORD): PDXRMachine_Tree;
-
 
762
begin
-
 
763
  Result := CreateTree;
-
 
764
  Result.Typ := DXR_TREETYPE_LOADBUMPTEXTURE;
-
 
765
  Result.Texture := Texture;
-
 
766
  Result.BumpTexture := BumpTexture;
-
 
767
end;
-
 
768
 
659
function TDXRMachine.CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree;
769
function TDXRMachine.CreateTree_Blend(Blend: TDXR_Blend; BlendTree1, BlendTree2: PDXRMachine_Tree): PDXRMachine_Tree;
660
begin
770
begin
661
  Result := CreateTree;
771
  Result := CreateTree;
662
  Result.Typ := DXR_TREETYPE_BLEND;
772
  Result.Typ := DXR_TREETYPE_BLEND;
663
  Result.Blend := Blend;
773
  Result.Blend := Blend;
Line 708... Line 818...
708
            Col1_1 := [];
818
            Col1_1 := [];
709
            Col1_2 := [];
819
            Col1_2 := [];
710
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
820
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
711
            Col2_2 := [];
821
            Col2_2 := [];
712
          end;
822
          end;
713
        DXR_BLEND_ONE1_ADD_ONE2,
823
        DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2:
-
 
824
          begin
-
 
825
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
714
        DXR_BLEND_ONE1_SUB_ONE2,
826
            Col1_2 := [];
-
 
827
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
715
        DXR_BLEND_ONE2_SUB_ONE1,
828
            Col2_2 := [];
-
 
829
          end;
716
        DXR_BLEND_ONE1_MUL_ONE2:
830
        DXR_BLEND_ONE2_SUB_ONE1, DXR_BLEND_ONE1_MUL_ONE2:
717
          begin
831
          begin
718
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
832
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
719
            Col1_2 := [];
833
            Col1_2 := [];
720
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
834
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
721
            Col2_2 := [];
835
            Col2_2 := [];
Line 754... Line 868...
754
            Col1_2 := [chAlpha];
868
            Col1_2 := [chAlpha];
755
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
869
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
756
            Col2_2 := [];
870
            Col2_2 := [];
757
          end;
871
          end;
758
 
872
 
-
 
873
        DXR_BLEND_DECAL:
-
 
874
          begin
-
 
875
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
-
 
876
            Col1_2 := [];
-
 
877
            Col2_1 := [];
-
 
878
            Col2_2 := [];
-
 
879
          end;
759
        DXR_BLEND_DECALALPHA:
880
        DXR_BLEND_DECALALPHA:
760
          begin
881
          begin
761
            Col1_1 := [chRed, chGreen, chBlue];
882
            Col1_1 := [chRed, chGreen, chBlue];
762
            Col1_2 := [];
883
            Col1_2 := [];
763
            Col2_1 := [];
884
            Col2_1 := [];
764
            Col2_2 := [chAlpha];
885
            Col2_2 := [chAlpha];
765
          end;
886
          end;
766
        DXR_BLEND_MODULATE:
887
        DXR_BLEND_MODULATE:
767
          begin
888
          begin
-
 
889
            Col1_1 := [chRed, chGreen, chBlue, chAlpha];
-
 
890
            Col1_2 := [];
-
 
891
            Col2_1 := [chRed, chGreen, chBlue, chAlpha];
-
 
892
            Col2_2 := [];
-
 
893
          end;
-
 
894
        DXR_BLEND_MODULATEALPHA:
-
 
895
          begin
768
            Col1_1 := [chRed, chGreen, chBlue];
896
            Col1_1 := [chRed, chGreen, chBlue];
769
            Col1_2 := [chAlpha];
897
            Col1_2 := [chAlpha];
770
            Col2_1 := [chRed, chGreen, chBlue];
898
            Col2_1 := [chRed, chGreen, chBlue];
771
            Col2_2 := [chAlpha];
899
            Col2_2 := [chAlpha];
772
          end;
900
          end;
Line 795... Line 923...
795
          end;
923
          end;
796
      DXR_TREETYPE_LOADTEXTURE:
924
      DXR_TREETYPE_LOADTEXTURE:
797
          begin
925
          begin
798
            // Load texel
926
            // Load texel
799
          end;
927
          end;
-
 
928
      DXR_TREETYPE_LOADBUMPTEXTURE:
-
 
929
          begin
-
 
930
            // Load texel with Bump mapping
-
 
931
          end;
800
      DXR_TREETYPE_LOADDESTPIXEL:
932
      DXR_TREETYPE_LOADDESTPIXEL:
801
          begin
933
          begin
802
            // Load dest pixel
934
            // Load dest pixel
803
          end;
935
          end;
804
      DXR_TREETYPE_BLEND:
936
      DXR_TREETYPE_BLEND:
Line 814... Line 946...
814
 
946
 
815
            if (Tree.Blend=DXR_BLEND_ZERO) then
947
            if (Tree.Blend=DXR_BLEND_ZERO) then
816
            begin
948
            begin
817
              c := Tree.Channels; Tree^.Typ := DXR_TREETYPE_LOADBLACK; Tree.Channels := c;
949
              c := Tree.Channels; Tree^.Typ := DXR_TREETYPE_LOADBLACK; Tree.Channels := c;
818
            end else
950
            end else
819
            if (Tree.Blend in [DXR_BLEND_ONE1]) then
951
            if (Tree.Blend in [DXR_BLEND_ONE1, DXR_BLEND_DECAL]) then
820
            begin
952
            begin
821
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
953
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
822
            end else
954
            end else
823
            if (Tree.Blend=DXR_BLEND_ONE2) then
955
            if (Tree.Blend=DXR_BLEND_ONE2) then
824
            begin
956
            begin
825
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
957
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
826
            end else
958
            end else
827
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2]) and
959
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
828
              (Tree.BlendTree2.Typ=DXR_TREETYPE_LOADBLACK) then
960
              (Tree.BlendTree2.Typ=DXR_TREETYPE_LOADBLACK) then
829
            begin
961
            begin
830
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
962
              c := Tree.Channels; Tree := Tree.BlendTree1; Tree.Channels := c;
831
            end else
963
            end else
832
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE1_SUB_ONE2]) and
964
            if (Tree.Blend in [DXR_BLEND_ONE1_ADD_ONE2, DXR_BLEND_ONE2_SUB_ONE1]) and
833
              (Tree.BlendTree1.Typ=DXR_TREETYPE_LOADBLACK) then
965
              (Tree.BlendTree1.Typ=DXR_TREETYPE_LOADBLACK) then
834
            begin
966
            begin
835
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
967
              c := Tree.Channels; Tree := Tree.BlendTree2; Tree.Channels := c;
836
            end else
968
            end else
837
            begin
969
            begin
Line 860... Line 992...
860
            // Load texel
992
            // Load texel
861
            TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
993
            TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
862
              Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
994
              Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
863
            TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
995
            TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
864
          end;
996
          end;
-
 
997
      DXR_TREETYPE_LOADBUMPTEXTURE:
-
 
998
          begin
-
 
999
            // Load texel with Bump mapping
-
 
1000
            TextureList[Tree.Texture].EnableChannels := TextureList[Tree.Texture].EnableChannels +
-
 
1001
              Tree.Channels*GetSurfaceChannels(TextureList[Tree.Texture].Surface^);
-
 
1002
            TextureList[Tree.Texture].Enable := TextureList[Tree.Texture].EnableChannels<>[];
-
 
1003
            TextureList[Tree.BumpTexture].Enable := True;
-
 
1004
          end;
865
      DXR_TREETYPE_LOADDESTPIXEL:
1005
      DXR_TREETYPE_LOADDESTPIXEL:
866
          begin
1006
          begin
867
            // Load dest pixel
1007
            // Load dest pixel
868
          end;
1008
          end;
869
      DXR_TREETYPE_BLEND:
1009
      DXR_TREETYPE_BLEND:
Line 898... Line 1038...
898
    begin
1038
    begin
899
      TextureIndex[TextureIndexCount] := i;
1039
      TextureIndex[TextureIndexCount] := i;
900
      Inc(TextureIndexCount);
1040
      Inc(TextureIndexCount);
901
    end;
1041
    end;
902
 
1042
 
-
 
1043
  ZBuffer.Enable := ZBuffer.Surface<>nil;
-
 
1044
 
-
 
1045
  RHW.Enable := ZBuffer.Enable;
903
  Axis.IncEnable := Dither.Enable;
1046
  Axis.IncEnable := Dither.Enable;
904
 
1047
 
905
  {  Generate X86 code  }
1048
  {  Generate X86 code  }
906
  Code := FBuf; GenerateCode(Code, Tree);
1049
  Code := FBuf; GenerateCode(Code, Tree);
907
 
1050
 
Line 1134... Line 1277...
1134
      sub edx,offset @@StartCode
1277
      sub edx,offset @@StartCode
1135
      mov dword ptr [ecx+edx],eax
1278
      mov dword ptr [ecx+edx],eax
1136
    end;
1279
    end;
1137
  end;
1280
  end;
1138
 
1281
 
-
 
1282
  procedure genInitZBuffer(var Code: Pointer);
-
 
1283
  var
-
 
1284
    _Axis: Pointer;
-
 
1285
    ByteCount, Pitch: DWORD;
-
 
1286
    Bits, _ZBuf: Pointer;
-
 
1287
  begin
-
 
1288
    if not ZBuffer.Enable then Exit;
-
 
1289
 
-
 
1290
    _Axis := @Axis.Axis;
-
 
1291
 
-
 
1292
    ByteCount := ZBuffer.Surface.BitCount div 8;
-
 
1293
    Pitch := ZBuffer.Surface.Pitch;
-
 
1294
    Bits := ZBuffer.Surface.Bits;
-
 
1295
 
-
 
1296
    _ZBuf := @F_ZBuf;
-
 
1297
 
-
 
1298
    asm
-
 
1299
      jmp @@EndCode
-
 
1300
    @@StartCode:
-
 
1301
      mov edx,dword ptr [offset _null]{}@@AxisX:
-
 
1302
      imul edx,$11{}        @@ByteCount: // States.ZBuffer.BitCount div 8
-
 
1303
      mov eax,dword ptr [offset _null]{}@@AxisY:
-
 
1304
      imul eax,$11111111{}  @@Pitch: // States.ZBuffer.pitch
-
 
1305
      add eax,$11111111{}   @@Bits:  // States.ZBuffer.Bits
-
 
1306
      add eax,edx
-
 
1307
      mov dword ptr [offset _null],eax{}@@_ZBuf:
-
 
1308
    @@EndCode:
-
 
1309
      {$I DXRender.inc}
-
 
1310
      {  @@AxisX  }
-
 
1311
      mov eax,_Axis; add eax,TDXRMachine_Axis.X
-
 
1312
      mov edx,offset @@AxisX-4
-
 
1313
      sub edx,offset @@StartCode
-
 
1314
      mov dword ptr [ecx+edx],eax
-
 
1315
 
-
 
1316
      {  @@AxisY  }
-
 
1317
      mov eax,_Axis; add eax,TDXRMachine_Axis.Y
-
 
1318
      mov edx,offset @@AxisY-4
-
 
1319
      sub edx,offset @@StartCode
-
 
1320
      mov dword ptr [ecx+edx],eax
-
 
1321
 
-
 
1322
      {  @@ByteCount  }
-
 
1323
      mov eax,ByteCount
-
 
1324
      mov edx,offset @@ByteCount-1
-
 
1325
      sub edx,offset @@StartCode
-
 
1326
      mov byte ptr [ecx+edx],al
-
 
1327
 
-
 
1328
      {  @@Pitch  }
-
 
1329
      mov eax,Pitch
-
 
1330
      mov edx,offset @@Pitch-4
-
 
1331
      sub edx,offset @@StartCode
-
 
1332
      mov dword ptr [ecx+edx],eax
-
 
1333
 
-
 
1334
      {  @@Bits  }
-
 
1335
      mov eax,Bits
-
 
1336
      mov edx,offset @@Bits-4
-
 
1337
      sub edx,offset @@StartCode
-
 
1338
      mov dword ptr [ecx+edx],eax
-
 
1339
 
-
 
1340
      {  @@_ZBuf  }
-
 
1341
      mov eax,_ZBuf
-
 
1342
      mov edx,offset @@_ZBuf-4
-
 
1343
      sub edx,offset @@StartCode
-
 
1344
      mov dword ptr [ecx+edx],eax
-
 
1345
    end;
-
 
1346
  end;
-
 
1347
 
-
 
1348
  procedure genZBufferTest(var Code: Pointer);
-
 
1349
  var
-
 
1350
    _ZBuf, _RHW: Pointer;
-
 
1351
  begin
-
 
1352
    if not ZBuffer.Enable then Exit;
-
 
1353
 
-
 
1354
    _ZBuf := @F_ZBuf;
-
 
1355
    _RHW := @RHW.nRHW;
-
 
1356
 
-
 
1357
    asm
-
 
1358
      jmp @@EndCode
-
 
1359
    @@StartCode:
-
 
1360
      mov edx,dword ptr [offset _null]{}@@_ZBuf:
-
 
1361
      mov ebx,dword ptr [offset _null]{}@@_RHW:
-
 
1362
    @@EndCode:
-
 
1363
      {$I DXRender.inc}
-
 
1364
      {  @@_ZBuf  }
-
 
1365
      mov eax,_ZBuf
-
 
1366
      mov edx,offset @@_ZBuf-4
-
 
1367
      sub edx,offset @@StartCode
-
 
1368
      mov dword ptr [ecx+edx],eax
-
 
1369
 
-
 
1370
      {  @@_RHW  }
-
 
1371
      mov eax,_RHW; add eax,4
-
 
1372
      mov edx,offset @@_RHW-4
-
 
1373
      sub edx,offset @@StartCode
-
 
1374
      mov dword ptr [ecx+edx],eax
-
 
1375
    end;
-
 
1376
 
-
 
1377
    if ZBuffer.CmpFunc<>DXR_CMPFUNC_ALWAYS then
-
 
1378
    begin
-
 
1379
      case ZBuffer.Surface.BitCount of
-
 
1380
        8: begin
-
 
1381
             asm
-
 
1382
               jmp @@EndCode
-
 
1383
             @@StartCode:
-
 
1384
               movzx eax,byte ptr [edx]
-
 
1385
             @@EndCode:
-
 
1386
               {$I DXRender.inc}
-
 
1387
             end;
-
 
1388
           end;
-
 
1389
       16: begin
-
 
1390
             asm
-
 
1391
               jmp @@EndCode
-
 
1392
             @@StartCode:
-
 
1393
               movzx eax,word ptr [edx]
-
 
1394
             @@EndCode:
-
 
1395
               {$I DXRender.inc}
-
 
1396
             end;
-
 
1397
           end;
-
 
1398
       24: begin
-
 
1399
             asm
-
 
1400
               jmp @@EndCode
-
 
1401
             @@StartCode:
-
 
1402
               movzx ax,byte ptr [edx+2]
-
 
1403
               shl eax,16
-
 
1404
               mov ax,word ptr [edx]
-
 
1405
             @@EndCode:
-
 
1406
               {$I DXRender.inc}
-
 
1407
             end;
-
 
1408
           end;
-
 
1409
       32: begin
-
 
1410
             asm
-
 
1411
               jmp @@EndCode
-
 
1412
             @@StartCode:
-
 
1413
               mov eax,dword ptr [edx]
-
 
1414
             @@EndCode:
-
 
1415
               {$I DXRender.inc}
-
 
1416
             end;
-
 
1417
           end;
-
 
1418
      end;
-
 
1419
 
-
 
1420
      asm
-
 
1421
        jmp @@EndCode
-
 
1422
      @@StartCode:
-
 
1423
        cmp eax,ebx
-
 
1424
      @@EndCode:
-
 
1425
        {$I DXRender.inc}
-
 
1426
      end;
-
 
1427
      genCmpFunc(Code, ZBuffer.CmpFunc, SkipAddress);
-
 
1428
    end;
-
 
1429
 
-
 
1430
    if ZBuffer.WriteEnable then
-
 
1431
    begin
-
 
1432
      case ZBuffer.Surface.BitCount of
-
 
1433
        8: begin
-
 
1434
             asm
-
 
1435
               jmp @@EndCode
-
 
1436
             @@StartCode:
-
 
1437
               mov byte ptr [edx],bl
-
 
1438
             @@EndCode:
-
 
1439
               {$I DXRender.inc}
-
 
1440
             end;
-
 
1441
           end;
-
 
1442
       16: begin
-
 
1443
             asm
-
 
1444
               jmp @@EndCode
-
 
1445
             @@StartCode:
-
 
1446
               mov word ptr [edx],bx
-
 
1447
             @@EndCode:
-
 
1448
               {$I DXRender.inc}
-
 
1449
             end;
-
 
1450
           end;
-
 
1451
       24: begin
-
 
1452
             asm
-
 
1453
               jmp @@EndCode
-
 
1454
             @@StartCode:
-
 
1455
               mov word ptr [edx],bx
-
 
1456
               bswap ebx
-
 
1457
               mov byte ptr [edx+2],bh
-
 
1458
             @@EndCode:
-
 
1459
               {$I DXRender.inc}
-
 
1460
             end;
-
 
1461
           end;
-
 
1462
       32: begin
-
 
1463
             asm
-
 
1464
               jmp @@EndCode
-
 
1465
             @@StartCode:
-
 
1466
               mov dword ptr [edx],ebx
-
 
1467
             @@EndCode:
-
 
1468
               {$I DXRender.inc}
-
 
1469
             end;
-
 
1470
           end;
-
 
1471
      end;
-
 
1472
    end;
-
 
1473
  end;
-
 
1474
 
-
 
1475
  procedure genUpdateZBufferAddress(var Code: Pointer);
-
 
1476
  var
-
 
1477
    ByteCount: DWORD;
-
 
1478
    _ZBuf: Pointer;
-
 
1479
  begin
-
 
1480
    if not ZBuffer.Enable then Exit;
-
 
1481
 
-
 
1482
    ByteCount := ZBuffer.Surface.BitCount shr 3;
-
 
1483
 
-
 
1484
    _ZBuf := @F_ZBuf;
-
 
1485
 
-
 
1486
    asm
-
 
1487
      jmp @@EndCode
-
 
1488
    @@StartCode:
-
 
1489
      add dword ptr [offset _null],$11{}@@_ZBuf:
-
 
1490
    @@EndCode:
-
 
1491
      {$I DXRender.inc}
-
 
1492
      {  @@_ZBuf  }
-
 
1493
      mov eax,ByteCount
-
 
1494
      mov edx,offset @@_ZBuf-1
-
 
1495
      sub edx,offset @@StartCode
-
 
1496
      mov byte ptr [ecx+edx],al
-
 
1497
 
-
 
1498
      {  @@_ZBuf  }
-
 
1499
      mov eax,_ZBuf
-
 
1500
      mov edx,offset @@_ZBuf-5
-
 
1501
      sub edx,offset @@StartCode
-
 
1502
      mov dword ptr [ecx+edx],eax
-
 
1503
    end;
-
 
1504
  end;
-
 
1505
 
1139
  procedure genReadDestPixel(var Code: Pointer);
1506
  procedure genReadDestPixel(var Code: Pointer);
1140
  begin
1507
  begin
1141
    case Dest.BitCount of
1508
    case Dest.BitCount of
1142
      8: begin
1509
      8: begin
1143
           asm
1510
           asm
Line 2621... Line 2988...
2621
              mov edx,offset @@idx_indexPal-4
2988
              mov edx,offset @@idx_indexPal-4
2622
              sub edx,offset @@StartCode
2989
              sub edx,offset @@StartCode
2623
              mov dword ptr [ecx+edx],eax
2990
              mov dword ptr [ecx+edx],eax
2624
 
2991
 
2625
              {  @@DestR  }
2992
              {  @@DestR  }
2626
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
2993
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
2627
              mov edx,offset @@DestR-4
2994
              mov edx,offset @@DestR-4
2628
              sub edx,offset @@StartCode
2995
              sub edx,offset @@StartCode
2629
              mov dword ptr [ecx+edx],eax
2996
              mov dword ptr [ecx+edx],eax
2630
 
2997
 
2631
              {  @@DestG  }
2998
              {  @@DestG  }
2632
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
2999
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
2633
              mov edx,offset @@DestG-4
3000
              mov edx,offset @@DestG-4
2634
              sub edx,offset @@StartCode
3001
              sub edx,offset @@StartCode
2635
              mov dword ptr [ecx+edx],eax
3002
              mov dword ptr [ecx+edx],eax
2636
 
3003
 
2637
              {  @@DestB  }
3004
              {  @@DestB  }
2638
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
3005
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
2639
              mov edx,offset @@DestB-4
3006
              mov edx,offset @@DestB-4
2640
              sub edx,offset @@StartCode
3007
              sub edx,offset @@StartCode
2641
              mov dword ptr [ecx+edx],eax
3008
              mov dword ptr [ecx+edx],eax
2642
            end;
3009
            end;
2643
          end else
3010
          end else
Line 2676... Line 3043...
2676
              mov edx,offset @@idx_indexPal-4
3043
              mov edx,offset @@idx_indexPal-4
2677
              sub edx,offset @@StartCode
3044
              sub edx,offset @@StartCode
2678
              mov dword ptr [ecx+edx],eax
3045
              mov dword ptr [ecx+edx],eax
2679
 
3046
 
2680
              {  @@DestR  }
3047
              {  @@DestR  }
2681
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
3048
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
2682
              mov edx,offset @@DestR-4
3049
              mov edx,offset @@DestR-4
2683
              sub edx,offset @@StartCode
3050
              sub edx,offset @@StartCode
2684
              mov dword ptr [ecx+edx],eax
3051
              mov dword ptr [ecx+edx],eax
2685
 
3052
 
2686
              {  @@DestG  }
3053
              {  @@DestG  }
2687
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
3054
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
2688
              mov edx,offset @@DestG-4
3055
              mov edx,offset @@DestG-4
2689
              sub edx,offset @@StartCode
3056
              sub edx,offset @@StartCode
2690
              mov dword ptr [ecx+edx],eax
3057
              mov dword ptr [ecx+edx],eax
2691
 
3058
 
2692
              {  @@DestB  }
3059
              {  @@DestB  }
2693
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
3060
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
2694
              mov edx,offset @@DestB-4
3061
              mov edx,offset @@DestB-4
2695
              sub edx,offset @@StartCode
3062
              sub edx,offset @@StartCode
2696
              mov dword ptr [ecx+edx],eax
3063
              mov dword ptr [ecx+edx],eax
2697
            end;
3064
            end;
2698
          end else
3065
          end else
Line 2730... Line 3097...
2730
              mov edx,offset @@idx_indexPal-4
3097
              mov edx,offset @@idx_indexPal-4
2731
              sub edx,offset @@StartCode
3098
              sub edx,offset @@StartCode
2732
              mov dword ptr [ecx+edx],eax
3099
              mov dword ptr [ecx+edx],eax
2733
 
3100
 
2734
              {  @@DestR  }
3101
              {  @@DestR  }
2735
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
3102
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
2736
              mov edx,offset @@DestR-4
3103
              mov edx,offset @@DestR-4
2737
              sub edx,offset @@StartCode
3104
              sub edx,offset @@StartCode
2738
              mov dword ptr [ecx+edx],eax
3105
              mov dword ptr [ecx+edx],eax
2739
 
3106
 
2740
              {  @@DestG  }
3107
              {  @@DestG  }
2741
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
3108
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
2742
              mov edx,offset @@DestG-4
3109
              mov edx,offset @@DestG-4
2743
              sub edx,offset @@StartCode
3110
              sub edx,offset @@StartCode
2744
              mov dword ptr [ecx+edx],eax
3111
              mov dword ptr [ecx+edx],eax
2745
 
3112
 
2746
              {  @@DestB  }
3113
              {  @@DestB  }
2747
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
3114
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
2748
              mov edx,offset @@DestB-4
3115
              mov edx,offset @@DestB-4
2749
              sub edx,offset @@StartCode
3116
              sub edx,offset @@StartCode
2750
              mov dword ptr [ecx+edx],eax
3117
              mov dword ptr [ecx+edx],eax
2751
            end;
3118
            end;
2752
          end;
3119
          end;
Line 2759... Line 3126...
2759
            mov word ptr [offset _null],$1111{}@@DestG:// @Dest.G
3126
            mov word ptr [offset _null],$1111{}@@DestG:// @Dest.G
2760
            mov word ptr [offset _null],$1111{}@@DestB:// @Dest.B
3127
            mov word ptr [offset _null],$1111{}@@DestB:// @Dest.B
2761
          @@EndCode:
3128
          @@EndCode:
2762
            {$I DXRender.inc}
3129
            {$I DXRender.inc}
2763
            {  @@DestR  }
3130
            {  @@DestR  }
2764
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R)
3131
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R)
2765
            mov edx,offset @@DestR-6
3132
            mov edx,offset @@DestR-6
2766
            sub edx,offset @@StartCode
3133
            sub edx,offset @@StartCode
2767
            mov dword ptr [ecx+edx],eax
3134
            mov dword ptr [ecx+edx],eax
2768
 
3135
 
2769
            mov ax,dcR
3136
            mov ax,dcR
2770
            mov edx,offset @@DestR-2
3137
            mov edx,offset @@DestR-2
2771
            sub edx,offset @@StartCode
3138
            sub edx,offset @@StartCode
2772
            mov word ptr [ecx+edx],ax
3139
            mov word ptr [ecx+edx],ax
2773
 
3140
 
2774
            {  @@DestG  }
3141
            {  @@DestG  }
2775
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G)
3142
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G)
2776
            mov edx,offset @@DestG-6
3143
            mov edx,offset @@DestG-6
2777
            sub edx,offset @@StartCode
3144
            sub edx,offset @@StartCode
2778
            mov dword ptr [ecx+edx],eax
3145
            mov dword ptr [ecx+edx],eax
2779
 
3146
 
2780
            mov ax,dcG
3147
            mov ax,dcG
2781
            mov edx,offset @@DestG-2
3148
            mov edx,offset @@DestG-2
2782
            sub edx,offset @@StartCode
3149
            sub edx,offset @@StartCode
2783
            mov word ptr [ecx+edx],ax
3150
            mov word ptr [ecx+edx],ax
2784
 
3151
 
2785
            {  @@DestB  }
3152
            {  @@DestB  }
2786
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B)
3153
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B)
2787
            mov edx,offset @@DestB-6
3154
            mov edx,offset @@DestB-6
2788
            sub edx,offset @@StartCode
3155
            sub edx,offset @@StartCode
2789
            mov dword ptr [ecx+edx],eax
3156
            mov dword ptr [ecx+edx],eax
2790
 
3157
 
2791
            mov ax,dcB
3158
            mov ax,dcB
Line 2823... Line 3190...
2823
              mov edx,offset @@idx_alphaRShift-1
3190
              mov edx,offset @@idx_alphaRShift-1
2824
              sub edx,offset @@StartCode
3191
              sub edx,offset @@StartCode
2825
              mov byte ptr [ecx+edx],al
3192
              mov byte ptr [ecx+edx],al
2826
 
3193
 
2827
              {  @@Dest  }
3194
              {  @@Dest  }
2828
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
3195
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
2829
              mov edx,offset @@Dest-4
3196
              mov edx,offset @@Dest-4
2830
              sub edx,offset @@StartCode
3197
              sub edx,offset @@StartCode
2831
              mov dword ptr [ecx+edx],eax
3198
              mov dword ptr [ecx+edx],eax
2832
            end;
3199
            end;
2833
          end else
3200
          end else
Line 2852... Line 3219...
2852
              mov edx,offset @@idx_alphaLShift-1
3219
              mov edx,offset @@idx_alphaLShift-1
2853
              sub edx,offset @@StartCode
3220
              sub edx,offset @@StartCode
2854
              mov byte ptr [ecx+edx],al
3221
              mov byte ptr [ecx+edx],al
2855
 
3222
 
2856
              {  @@Dest  }
3223
              {  @@Dest  }
2857
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
3224
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
2858
              mov edx,offset @@Dest-4
3225
              mov edx,offset @@Dest-4
2859
              sub edx,offset @@StartCode
3226
              sub edx,offset @@StartCode
2860
              mov dword ptr [ecx+edx],eax
3227
              mov dword ptr [ecx+edx],eax
2861
            end;
3228
            end;
2862
          end;
3229
          end;
Line 2867... Line 3234...
2867
          @@StartCode:
3234
          @@StartCode:
2868
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.A
3235
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.A
2869
          @@EndCode:
3236
          @@EndCode:
2870
            {$I DXRender.inc}
3237
            {$I DXRender.inc}
2871
            {  @@Dest  }
3238
            {  @@Dest  }
2872
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A)
3239
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A)
2873
            mov edx,offset @@Dest-6
3240
            mov edx,offset @@Dest-6
2874
            sub edx,offset @@StartCode
3241
            sub edx,offset @@StartCode
2875
            mov dword ptr [ecx+edx],eax
3242
            mov dword ptr [ecx+edx],eax
2876
 
3243
 
2877
            mov ax,dcA
3244
            mov ax,dcA
Line 2910... Line 3277...
2910
              mov edx,offset @@RShift-1
3277
              mov edx,offset @@RShift-1
2911
              sub edx,offset @@StartCode
3278
              sub edx,offset @@StartCode
2912
              mov byte ptr [ecx+edx],al
3279
              mov byte ptr [ecx+edx],al
2913
 
3280
 
2914
              {  @@Dest  }
3281
              {  @@Dest  }
2915
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
3282
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
2916
              mov edx,offset @@Dest-4
3283
              mov edx,offset @@Dest-4
2917
              sub edx,offset @@StartCode
3284
              sub edx,offset @@StartCode
2918
              mov dword ptr [ecx+edx],eax
3285
              mov dword ptr [ecx+edx],eax
2919
            end;
3286
            end;
2920
          end else
3287
          end else
Line 2939... Line 3306...
2939
              mov edx,offset @@LShift-1
3306
              mov edx,offset @@LShift-1
2940
              sub edx,offset @@StartCode
3307
              sub edx,offset @@StartCode
2941
              mov byte ptr [ecx+edx],al
3308
              mov byte ptr [ecx+edx],al
2942
 
3309
 
2943
              {  @@Dest  }
3310
              {  @@Dest  }
2944
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
3311
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
2945
              mov edx,offset @@Dest-4
3312
              mov edx,offset @@Dest-4
2946
              sub edx,offset @@StartCode
3313
              sub edx,offset @@StartCode
2947
              mov dword ptr [ecx+edx],eax
3314
              mov dword ptr [ecx+edx],eax
2948
            end;
3315
            end;
2949
          end;
3316
          end;
Line 2954... Line 3321...
2954
          @@StartCode:
3321
          @@StartCode:
2955
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.R
3322
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.R
2956
          @@EndCode:
3323
          @@EndCode:
2957
            {$I DXRender.inc}
3324
            {$I DXRender.inc}
2958
            {  @@Dest  }
3325
            {  @@Dest  }
2959
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R)
3326
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R)
2960
            mov edx,offset @@Dest-6
3327
            mov edx,offset @@Dest-6
2961
            sub edx,offset @@StartCode
3328
            sub edx,offset @@StartCode
2962
            mov dword ptr [ecx+edx],eax
3329
            mov dword ptr [ecx+edx],eax
2963
 
3330
 
2964
            mov ax,dcR
3331
            mov ax,dcR
Line 2996... Line 3363...
2996
              mov edx,offset @@RShift-1
3363
              mov edx,offset @@RShift-1
2997
              sub edx,offset @@StartCode
3364
              sub edx,offset @@StartCode
2998
              mov byte ptr [ecx+edx],al
3365
              mov byte ptr [ecx+edx],al
2999
 
3366
 
3000
              {  @@Dest  }
3367
              {  @@Dest  }
3001
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
3368
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
3002
              mov edx,offset @@Dest-4
3369
              mov edx,offset @@Dest-4
3003
              sub edx,offset @@StartCode
3370
              sub edx,offset @@StartCode
3004
              mov dword ptr [ecx+edx],eax
3371
              mov dword ptr [ecx+edx],eax
3005
            end;
3372
            end;
3006
          end else
3373
          end else
Line 3025... Line 3392...
3025
              mov edx,offset @@LShift-1
3392
              mov edx,offset @@LShift-1
3026
              sub edx,offset @@StartCode
3393
              sub edx,offset @@StartCode
3027
              mov byte ptr [ecx+edx],al
3394
              mov byte ptr [ecx+edx],al
3028
 
3395
 
3029
              {  @@Dest  }
3396
              {  @@Dest  }
3030
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
3397
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
3031
              mov edx,offset @@Dest-4
3398
              mov edx,offset @@Dest-4
3032
              sub edx,offset @@StartCode
3399
              sub edx,offset @@StartCode
3033
              mov dword ptr [ecx+edx],eax
3400
              mov dword ptr [ecx+edx],eax
3034
            end;
3401
            end;
3035
          end;
3402
          end;
Line 3040... Line 3407...
3040
          @@StartCode:
3407
          @@StartCode:
3041
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.G
3408
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.G
3042
          @@EndCode:
3409
          @@EndCode:
3043
            {$I DXRender.inc}
3410
            {$I DXRender.inc}
3044
            {  @@Dest  }
3411
            {  @@Dest  }
3045
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G)
3412
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G)
3046
            mov edx,offset @@Dest-6
3413
            mov edx,offset @@Dest-6
3047
            sub edx,offset @@StartCode
3414
            sub edx,offset @@StartCode
3048
            mov dword ptr [ecx+edx],eax
3415
            mov dword ptr [ecx+edx],eax
3049
 
3416
 
3050
            mov ax,dcG
3417
            mov ax,dcG
Line 3082... Line 3449...
3082
              mov edx,offset @@RShift-1
3449
              mov edx,offset @@RShift-1
3083
              sub edx,offset @@StartCode
3450
              sub edx,offset @@StartCode
3084
              mov byte ptr [ecx+edx],al
3451
              mov byte ptr [ecx+edx],al
3085
 
3452
 
3086
              {  @@Dest  }
3453
              {  @@Dest  }
3087
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
3454
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
3088
              mov edx,offset @@Dest-4
3455
              mov edx,offset @@Dest-4
3089
              sub edx,offset @@StartCode
3456
              sub edx,offset @@StartCode
3090
              mov dword ptr [ecx+edx],eax
3457
              mov dword ptr [ecx+edx],eax
3091
            end;
3458
            end;
3092
          end else
3459
          end else
Line 3111... Line 3478...
3111
              mov edx,offset @@LShift-1
3478
              mov edx,offset @@LShift-1
3112
              sub edx,offset @@StartCode
3479
              sub edx,offset @@StartCode
3113
              mov byte ptr [ecx+edx],al
3480
              mov byte ptr [ecx+edx],al
3114
 
3481
 
3115
              {  @@Dest  }
3482
              {  @@Dest  }
3116
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
3483
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
3117
              mov edx,offset @@Dest-4
3484
              mov edx,offset @@Dest-4
3118
              sub edx,offset @@StartCode
3485
              sub edx,offset @@StartCode
3119
              mov dword ptr [ecx+edx],eax
3486
              mov dword ptr [ecx+edx],eax
3120
            end;
3487
            end;
3121
          end;
3488
          end;
Line 3126... Line 3493...
3126
          @@StartCode:
3493
          @@StartCode:
3127
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.B
3494
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.B
3128
          @@EndCode:
3495
          @@EndCode:
3129
            {$I DXRender.inc}
3496
            {$I DXRender.inc}
3130
            {  @@Dest  }
3497
            {  @@Dest  }
3131
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B)
3498
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B)
3132
            mov edx,offset @@Dest-6
3499
            mov edx,offset @@Dest-6
3133
            sub edx,offset @@StartCode
3500
            sub edx,offset @@StartCode
3134
            mov dword ptr [ecx+edx],eax
3501
            mov dword ptr [ecx+edx],eax
3135
 
3502
 
3136
            mov ax,dcB
3503
            mov ax,dcB
Line 3168... Line 3535...
3168
              mov edx,offset @@RShift-1
3535
              mov edx,offset @@RShift-1
3169
              sub edx,offset @@StartCode
3536
              sub edx,offset @@StartCode
3170
              mov byte ptr [ecx+edx],al
3537
              mov byte ptr [ecx+edx],al
3171
 
3538
 
3172
              {  @@Dest  }
3539
              {  @@Dest  }
3173
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
3540
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
3174
              mov edx,offset @@Dest-4
3541
              mov edx,offset @@Dest-4
3175
              sub edx,offset @@StartCode
3542
              sub edx,offset @@StartCode
3176
              mov dword ptr [ecx+edx],eax
3543
              mov dword ptr [ecx+edx],eax
3177
            end;
3544
            end;
3178
          end else
3545
          end else
Line 3197... Line 3564...
3197
              mov edx,offset @@LShift-1
3564
              mov edx,offset @@LShift-1
3198
              sub edx,offset @@StartCode
3565
              sub edx,offset @@StartCode
3199
              mov byte ptr [ecx+edx],al
3566
              mov byte ptr [ecx+edx],al
3200
 
3567
 
3201
              {  @@Dest  }
3568
              {  @@Dest  }
3202
              mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
3569
              mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
3203
              mov edx,offset @@Dest-4
3570
              mov edx,offset @@Dest-4
3204
              sub edx,offset @@StartCode
3571
              sub edx,offset @@StartCode
3205
              mov dword ptr [ecx+edx],eax
3572
              mov dword ptr [ecx+edx],eax
3206
            end;
3573
            end;
3207
          end;
3574
          end;
Line 3212... Line 3579...
3212
          @@StartCode:
3579
          @@StartCode:
3213
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.A
3580
            mov word ptr [offset _null],$1111{}@@Dest:// @Dest.A
3214
          @@EndCode:
3581
          @@EndCode:
3215
            {$I DXRender.inc}
3582
            {$I DXRender.inc}
3216
            {  @@Dest  }
3583
            {  @@Dest  }
3217
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A)
3584
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A)
3218
            mov edx,offset @@Dest-6
3585
            mov edx,offset @@Dest-6
3219
            sub edx,offset @@StartCode
3586
            sub edx,offset @@StartCode
3220
            mov dword ptr [ecx+edx],eax
3587
            mov dword ptr [ecx+edx],eax
3221
 
3588
 
3222
            mov ax,dcA
3589
            mov ax,dcA
Line 3252... Line 3619...
3252
          and edx,$11111111{}@@rgb_redMask:    // Surface.rgb_red.Mask
3619
          and edx,$11111111{}@@rgb_redMask:    // Surface.rgb_red.Mask
3253
          or eax,edx
3620
          or eax,edx
3254
        @@EndCode:
3621
        @@EndCode:
3255
          {$I DXRender.inc}
3622
          {$I DXRender.inc}
3256
          {  @@Src  }
3623
          {  @@Src  }
3257
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
3624
          mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
3258
          mov edx,offset @@Src-4
3625
          mov edx,offset @@Src-4
3259
          sub edx,offset @@StartCode
3626
          sub edx,offset @@StartCode
3260
          mov dword ptr [ecx+edx],eax
3627
          mov dword ptr [ecx+edx],eax
3261
 
3628
 
3262
          {  @@rgb_redMask  }
3629
          {  @@rgb_redMask  }
Line 3281... Line 3648...
3281
          and edx,$11111111{}@@rgb_redMask:    // Surface.rgb_red.Mask
3648
          and edx,$11111111{}@@rgb_redMask:    // Surface.rgb_red.Mask
3282
          or eax,edx
3649
          or eax,edx
3283
        @@EndCode:
3650
        @@EndCode:
3284
          {$I DXRender.inc}
3651
          {$I DXRender.inc}
3285
          {  @@Src  }
3652
          {  @@Src  }
3286
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
3653
          mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
3287
          mov edx,offset @@Src-4
3654
          mov edx,offset @@Src-4
3288
          sub edx,offset @@StartCode
3655
          sub edx,offset @@StartCode
3289
          mov dword ptr [ecx+edx],eax
3656
          mov dword ptr [ecx+edx],eax
3290
 
3657
 
3291
          {  @@rgb_redMask  }
3658
          {  @@rgb_redMask  }
Line 3316... Line 3683...
3316
          and edx,$11111111{}@@rgb_greenMask:    // Surface.rgb_green.Mask
3683
          and edx,$11111111{}@@rgb_greenMask:    // Surface.rgb_green.Mask
3317
          or eax,edx
3684
          or eax,edx
3318
        @@EndCode:
3685
        @@EndCode:
3319
          {$I DXRender.inc}
3686
          {$I DXRender.inc}
3320
          {  @@Src  }
3687
          {  @@Src  }
3321
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
3688
          mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
3322
          mov edx,offset @@Src-4
3689
          mov edx,offset @@Src-4
3323
          sub edx,offset @@StartCode
3690
          sub edx,offset @@StartCode
3324
          mov dword ptr [ecx+edx],eax
3691
          mov dword ptr [ecx+edx],eax
3325
 
3692
 
3326
          {  @@rgb_greenMask  }
3693
          {  @@rgb_greenMask  }
Line 3345... Line 3712...
3345
          and edx,$11111111{}@@rgb_greenMask:    // Surface.rgb_green.Mask
3712
          and edx,$11111111{}@@rgb_greenMask:    // Surface.rgb_green.Mask
3346
          or eax,edx
3713
          or eax,edx
3347
        @@EndCode:
3714
        @@EndCode:
3348
          {$I DXRender.inc}
3715
          {$I DXRender.inc}
3349
          {  @@Src  }
3716
          {  @@Src  }
3350
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
3717
          mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
3351
          mov edx,offset @@Src-4
3718
          mov edx,offset @@Src-4
3352
          sub edx,offset @@StartCode
3719
          sub edx,offset @@StartCode
3353
          mov dword ptr [ecx+edx],eax
3720
          mov dword ptr [ecx+edx],eax
3354
 
3721
 
3355
          {  @@rgb_greenMask  }
3722
          {  @@rgb_greenMask  }
Line 3380... Line 3747...
3380
          and edx,$11111111{}@@rgb_blueMask:    // Surface.rgb_blue.Mask
3747
          and edx,$11111111{}@@rgb_blueMask:    // Surface.rgb_blue.Mask
3381
          or eax,edx
3748
          or eax,edx
3382
        @@EndCode:
3749
        @@EndCode:
3383
          {$I DXRender.inc}
3750
          {$I DXRender.inc}
3384
          {  @@Src  }
3751
          {  @@Src  }
3385
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
3752
          mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
3386
          mov edx,offset @@Src-4
3753
          mov edx,offset @@Src-4
3387
          sub edx,offset @@StartCode
3754
          sub edx,offset @@StartCode
3388
          mov dword ptr [ecx+edx],eax
3755
          mov dword ptr [ecx+edx],eax
3389
 
3756
 
3390
          {  @@rgb_blueMask  }
3757
          {  @@rgb_blueMask  }
Line 3409... Line 3776...
3409
          and edx,$11111111{}@@rgb_blueMask:    // Surface.rgb_blue.Mask
3776
          and edx,$11111111{}@@rgb_blueMask:    // Surface.rgb_blue.Mask
3410
          or eax,edx
3777
          or eax,edx
3411
        @@EndCode:
3778
        @@EndCode:
3412
          {$I DXRender.inc}
3779
          {$I DXRender.inc}
3413
          {  @@Src  }
3780
          {  @@Src  }
3414
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
3781
          mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
3415
          mov edx,offset @@Src-4
3782
          mov edx,offset @@Src-4
3416
          sub edx,offset @@StartCode
3783
          sub edx,offset @@StartCode
3417
          mov dword ptr [ecx+edx],eax
3784
          mov dword ptr [ecx+edx],eax
3418
 
3785
 
3419
          {  @@rgb_blueMask  }
3786
          {  @@rgb_blueMask  }
Line 3444... Line 3811...
3444
          and edx,$11111111{}@@rgb_alphaMask:   // Surface.rgb_alpha.Mask
3811
          and edx,$11111111{}@@rgb_alphaMask:   // Surface.rgb_alpha.Mask
3445
          or eax,edx
3812
          or eax,edx
3446
        @@EndCode:
3813
        @@EndCode:
3447
          {$I DXRender.inc}
3814
          {$I DXRender.inc}
3448
          {  @@Src  }
3815
          {  @@Src  }
3449
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
3816
          mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
3450
          mov edx,offset @@Src-4
3817
          mov edx,offset @@Src-4
3451
          sub edx,offset @@StartCode
3818
          sub edx,offset @@StartCode
3452
          mov dword ptr [ecx+edx],eax
3819
          mov dword ptr [ecx+edx],eax
3453
 
3820
 
3454
          {  @@rgb_alphaMask  }
3821
          {  @@rgb_alphaMask  }
Line 3473... Line 3840...
3473
          and edx,$11111111{}@@rgb_alphaMask:   // Surface.rgb_alpha.Mask
3840
          and edx,$11111111{}@@rgb_alphaMask:   // Surface.rgb_alpha.Mask
3474
          or eax,edx
3841
          or eax,edx
3475
        @@EndCode:
3842
        @@EndCode:
3476
          {$I DXRender.inc}
3843
          {$I DXRender.inc}
3477
          {  @@Src  }
3844
          {  @@Src  }
3478
          mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
3845
          mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
3479
          mov edx,offset @@Src-4
3846
          mov edx,offset @@Src-4
3480
          sub edx,offset @@StartCode
3847
          sub edx,offset @@StartCode
3481
          mov dword ptr [ecx+edx],eax
3848
          mov dword ptr [ecx+edx],eax
3482
 
3849
 
3483
          {  @@rgb_alphaMask  }
3850
          {  @@rgb_alphaMask  }
Line 3533... Line 3900...
3533
      @@StartCode:
3900
      @@StartCode:
3534
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.R
3901
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.R
3535
      @@EndCode:
3902
      @@EndCode:
3536
        {$I DXRender.inc}
3903
        {$I DXRender.inc}
3537
        {  @@Src  }
3904
        {  @@Src  }
3538
        mov eax,Src; add eax,BYTE(TDXRMachine_Color.R+1)
3905
        mov eax,Src; add eax,Byte(TDXRMachine_Color.R+1)
3539
        mov edx,offset @@Src-4
3906
        mov edx,offset @@Src-4
3540
        sub edx,offset @@StartCode
3907
        sub edx,offset @@StartCode
3541
        mov dword ptr [ecx+edx],eax
3908
        mov dword ptr [ecx+edx],eax
3542
      end;
3909
      end;
3543
 
3910
 
Line 3623... Line 3990...
3623
      @@StartCode:
3990
      @@StartCode:
3624
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.G
3991
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.G
3625
      @@EndCode:
3992
      @@EndCode:
3626
        {$I DXRender.inc}
3993
        {$I DXRender.inc}
3627
        {  @@Src  }
3994
        {  @@Src  }
3628
        mov eax,Src; add eax,BYTE(TDXRMachine_Color.G+1)
3995
        mov eax,Src; add eax,Byte(TDXRMachine_Color.G+1)
3629
        mov edx,offset @@Src-4
3996
        mov edx,offset @@Src-4
3630
        sub edx,offset @@StartCode
3997
        sub edx,offset @@StartCode
3631
        mov dword ptr [ecx+edx],eax
3998
        mov dword ptr [ecx+edx],eax
3632
      end;
3999
      end;
3633
 
4000
 
Line 3713... Line 4080...
3713
      @@StartCode:
4080
      @@StartCode:
3714
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.B
4081
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.B
3715
      @@EndCode:
4082
      @@EndCode:
3716
        {$I DXRender.inc}
4083
        {$I DXRender.inc}
3717
        {  @@Src  }
4084
        {  @@Src  }
3718
        mov eax,Src; add eax,BYTE(TDXRMachine_Color.B+1)
4085
        mov eax,Src; add eax,Byte(TDXRMachine_Color.B+1)
3719
        mov edx,offset @@Src-4
4086
        mov edx,offset @@Src-4
3720
        sub edx,offset @@StartCode
4087
        sub edx,offset @@StartCode
3721
        mov dword ptr [ecx+edx],eax
4088
        mov dword ptr [ecx+edx],eax
3722
      end;
4089
      end;
3723
 
4090
 
Line 3803... Line 4170...
3803
      @@StartCode:
4170
      @@StartCode:
3804
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.R
4171
        movzx edx,byte ptr [offset _null]{}@@Src:// @Src.R
3805
      @@EndCode:
4172
      @@EndCode:
3806
        {$I DXRender.inc}
4173
        {$I DXRender.inc}
3807
        {  @@Src  }
4174
        {  @@Src  }
3808
        mov eax,Src; add eax,BYTE(TDXRMachine_Color.A+1)
4175
        mov eax,Src; add eax,Byte(TDXRMachine_Color.A+1)
3809
        mov edx,offset @@Src-4
4176
        mov edx,offset @@Src-4
3810
        sub edx,offset @@StartCode
4177
        sub edx,offset @@StartCode
3811
        mov dword ptr [ecx+edx],eax
4178
        mov dword ptr [ecx+edx],eax
3812
      end;
4179
      end;
3813
 
4180
 
Line 3887... Line 4254...
3887
  end;
4254
  end;
3888
 
4255
 
3889
  procedure genEncodeColor2(var Code: Pointer; const Surface: TDXR_Surface; Src: PDXRMachine_Color; EnableChannels: TDXRColorChannels);
4256
  procedure genEncodeColor2(var Code: Pointer; const Surface: TDXR_Surface; Src: PDXRMachine_Color; EnableChannels: TDXRColorChannels);
3890
  begin
4257
  begin
3891
    if Dither.Enable then
4258
    if Dither.Enable then
-
 
4259
    begin
3892
      genEncodeColor_with_Dither(Code, Surface, Src, @Axis.Axis, EnableChannels)
4260
      genEncodeColor_with_Dither(Code, Surface, Src, @Axis.Axis, EnableChannels)
3893
    else
4261
    end else
-
 
4262
    begin
3894
      genEncodeColor(Code, Surface, Src, EnableChannels);
4263
      genEncodeColor(Code, Surface, Src, EnableChannels);
3895
  end;
4264
    end;
-
 
4265
  end;
3896
 
4266
 
3897
  procedure genColorKey(var Code: Pointer; const Texture: TDXRMachine_Reg_Texture);
4267
  procedure genColorKey(var Code: Pointer; const Texture: TDXRMachine_Reg_Texture);
3898
  var
4268
  var
3899
    TransparentMask, TransparentColor: DWORD;
4269
    TransparentMask, TransparentColor: DWORD;
3900
  begin
4270
  begin
Line 4236... Line 4606...
4236
 
4606
 
4237
          mov byte ptr [offset _Null],al{}@@Dest:
4607
          mov byte ptr [offset _Null],al{}@@Dest:
4238
        @@EndCode:
4608
        @@EndCode:
4239
          {$I DXRender.inc}
4609
          {$I DXRender.inc}
4240
          {  @@_BiLinearCol1  }
4610
          {  @@_BiLinearCol1  }
4241
          mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.R+1)
4611
          mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.R+1)
4242
          mov edx,offset @@_BiLinearCol1-4
4612
          mov edx,offset @@_BiLinearCol1-4
4243
          sub edx,offset @@StartCode
4613
          sub edx,offset @@StartCode
4244
          mov dword ptr [ecx+edx],eax
4614
          mov dword ptr [ecx+edx],eax
4245
 
4615
 
4246
          {  @@_BiLinearCol2  }
4616
          {  @@_BiLinearCol2  }
4247
          mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.R+1)
4617
          mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.R+1)
4248
          mov edx,offset @@_BiLinearCol2-4
4618
          mov edx,offset @@_BiLinearCol2-4
4249
          sub edx,offset @@StartCode
4619
          sub edx,offset @@StartCode
4250
          mov dword ptr [ecx+edx],eax
4620
          mov dword ptr [ecx+edx],eax
4251
 
4621
 
4252
          {  @@_BiLinearCol3  }
4622
          {  @@_BiLinearCol3  }
4253
          mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.R+1)
4623
          mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.R+1)
4254
          mov edx,offset @@_BiLinearCol3-4
4624
          mov edx,offset @@_BiLinearCol3-4
4255
          sub edx,offset @@StartCode
4625
          sub edx,offset @@StartCode
4256
          mov dword ptr [ecx+edx],eax
4626
          mov dword ptr [ecx+edx],eax
4257
 
4627
 
4258
          {  @@_BiLinearCol4  }
4628
          {  @@_BiLinearCol4  }
4259
          mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.R+1)
4629
          mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.R+1)
4260
          mov edx,offset @@_BiLinearCol4-4
4630
          mov edx,offset @@_BiLinearCol4-4
4261
          sub edx,offset @@StartCode
4631
          sub edx,offset @@StartCode
4262
          mov dword ptr [ecx+edx],eax
4632
          mov dword ptr [ecx+edx],eax
4263
 
4633
 
4264
          {  @@TexX  }
4634
          {  @@TexX  }
Line 4272... Line 4642...
4272
          mov edx,offset @@TexY-4
4642
          mov edx,offset @@TexY-4
4273
          sub edx,offset @@StartCode
4643
          sub edx,offset @@StartCode
4274
          mov dword ptr [ecx+edx],eax
4644
          mov dword ptr [ecx+edx],eax
4275
 
4645
 
4276
          {  @@Dest  }
4646
          {  @@Dest  }
4277
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
4647
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
4278
          mov edx,offset @@Dest-4
4648
          mov edx,offset @@Dest-4
4279
          sub edx,offset @@StartCode
4649
          sub edx,offset @@StartCode
4280
          mov dword ptr [ecx+edx],eax
4650
          mov dword ptr [ecx+edx],eax
4281
        end;
4651
        end;
4282
      end;
4652
      end;
Line 4312... Line 4682...
4312
 
4682
 
4313
          mov byte ptr [offset _Null],al{}@@Dest:
4683
          mov byte ptr [offset _Null],al{}@@Dest:
4314
        @@EndCode:
4684
        @@EndCode:
4315
          {$I DXRender.inc}
4685
          {$I DXRender.inc}
4316
          {  @@_BiLinearCol1  }
4686
          {  @@_BiLinearCol1  }
4317
          mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.G+1)
4687
          mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.G+1)
4318
          mov edx,offset @@_BiLinearCol1-4
4688
          mov edx,offset @@_BiLinearCol1-4
4319
          sub edx,offset @@StartCode
4689
          sub edx,offset @@StartCode
4320
          mov dword ptr [ecx+edx],eax
4690
          mov dword ptr [ecx+edx],eax
4321
 
4691
 
4322
          {  @@_BiLinearCol2  }
4692
          {  @@_BiLinearCol2  }
4323
          mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.G+1)
4693
          mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.G+1)
4324
          mov edx,offset @@_BiLinearCol2-4
4694
          mov edx,offset @@_BiLinearCol2-4
4325
          sub edx,offset @@StartCode
4695
          sub edx,offset @@StartCode
4326
          mov dword ptr [ecx+edx],eax
4696
          mov dword ptr [ecx+edx],eax
4327
 
4697
 
4328
          {  @@_BiLinearCol3  }
4698
          {  @@_BiLinearCol3  }
4329
          mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.G+1)
4699
          mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.G+1)
4330
          mov edx,offset @@_BiLinearCol3-4
4700
          mov edx,offset @@_BiLinearCol3-4
4331
          sub edx,offset @@StartCode
4701
          sub edx,offset @@StartCode
4332
          mov dword ptr [ecx+edx],eax
4702
          mov dword ptr [ecx+edx],eax
4333
 
4703
 
4334
          {  @@_BiLinearCol4  }
4704
          {  @@_BiLinearCol4  }
4335
          mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.G+1)
4705
          mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.G+1)
4336
          mov edx,offset @@_BiLinearCol4-4
4706
          mov edx,offset @@_BiLinearCol4-4
4337
          sub edx,offset @@StartCode
4707
          sub edx,offset @@StartCode
4338
          mov dword ptr [ecx+edx],eax
4708
          mov dword ptr [ecx+edx],eax
4339
 
4709
 
4340
          {  @@TexX  }
4710
          {  @@TexX  }
Line 4348... Line 4718...
4348
          mov edx,offset @@TexY-4
4718
          mov edx,offset @@TexY-4
4349
          sub edx,offset @@StartCode
4719
          sub edx,offset @@StartCode
4350
          mov dword ptr [ecx+edx],eax
4720
          mov dword ptr [ecx+edx],eax
4351
 
4721
 
4352
          {  @@Dest  }
4722
          {  @@Dest  }
4353
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
4723
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
4354
          mov edx,offset @@Dest-4
4724
          mov edx,offset @@Dest-4
4355
          sub edx,offset @@StartCode
4725
          sub edx,offset @@StartCode
4356
          mov dword ptr [ecx+edx],eax
4726
          mov dword ptr [ecx+edx],eax
4357
        end;
4727
        end;
4358
      end;
4728
      end;
Line 4388... Line 4758...
4388
 
4758
 
4389
          mov byte ptr [offset _Null],al{}@@Dest:
4759
          mov byte ptr [offset _Null],al{}@@Dest:
4390
        @@EndCode:
4760
        @@EndCode:
4391
          {$I DXRender.inc}
4761
          {$I DXRender.inc}
4392
          {  @@_BiLinearCol1  }
4762
          {  @@_BiLinearCol1  }
4393
          mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.B+1)
4763
          mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.B+1)
4394
          mov edx,offset @@_BiLinearCol1-4
4764
          mov edx,offset @@_BiLinearCol1-4
4395
          sub edx,offset @@StartCode
4765
          sub edx,offset @@StartCode
4396
          mov dword ptr [ecx+edx],eax
4766
          mov dword ptr [ecx+edx],eax
4397
 
4767
 
4398
          {  @@_BiLinearCol2  }
4768
          {  @@_BiLinearCol2  }
4399
          mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.B+1)
4769
          mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.B+1)
4400
          mov edx,offset @@_BiLinearCol2-4
4770
          mov edx,offset @@_BiLinearCol2-4
4401
          sub edx,offset @@StartCode
4771
          sub edx,offset @@StartCode
4402
          mov dword ptr [ecx+edx],eax
4772
          mov dword ptr [ecx+edx],eax
4403
 
4773
 
4404
          {  @@_BiLinearCol3  }
4774
          {  @@_BiLinearCol3  }
4405
          mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.B+1)
4775
          mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.B+1)
4406
          mov edx,offset @@_BiLinearCol3-4
4776
          mov edx,offset @@_BiLinearCol3-4
4407
          sub edx,offset @@StartCode
4777
          sub edx,offset @@StartCode
4408
          mov dword ptr [ecx+edx],eax
4778
          mov dword ptr [ecx+edx],eax
4409
 
4779
 
4410
          {  @@_BiLinearCol4  }
4780
          {  @@_BiLinearCol4  }
4411
          mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.B+1)
4781
          mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.B+1)
4412
          mov edx,offset @@_BiLinearCol4-4
4782
          mov edx,offset @@_BiLinearCol4-4
4413
          sub edx,offset @@StartCode
4783
          sub edx,offset @@StartCode
4414
          mov dword ptr [ecx+edx],eax
4784
          mov dword ptr [ecx+edx],eax
4415
 
4785
 
4416
          {  @@TexX  }
4786
          {  @@TexX  }
Line 4424... Line 4794...
4424
          mov edx,offset @@TexY-4
4794
          mov edx,offset @@TexY-4
4425
          sub edx,offset @@StartCode
4795
          sub edx,offset @@StartCode
4426
          mov dword ptr [ecx+edx],eax
4796
          mov dword ptr [ecx+edx],eax
4427
 
4797
 
4428
          {  @@Dest  }
4798
          {  @@Dest  }
4429
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
4799
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
4430
          mov edx,offset @@Dest-4
4800
          mov edx,offset @@Dest-4
4431
          sub edx,offset @@StartCode
4801
          sub edx,offset @@StartCode
4432
          mov dword ptr [ecx+edx],eax
4802
          mov dword ptr [ecx+edx],eax
4433
        end;
4803
        end;
4434
      end;
4804
      end;
Line 4464... Line 4834...
4464
 
4834
 
4465
          mov byte ptr [offset _Null],al{}@@Dest:
4835
          mov byte ptr [offset _Null],al{}@@Dest:
4466
        @@EndCode:
4836
        @@EndCode:
4467
          {$I DXRender.inc}
4837
          {$I DXRender.inc}
4468
          {  @@_BiLinearCol1  }
4838
          {  @@_BiLinearCol1  }
4469
          mov eax,_BiLinearCol1; add eax,BYTE(TDXRMachine_Color.A+1)
4839
          mov eax,_BiLinearCol1; add eax,Byte(TDXRMachine_Color.A+1)
4470
          mov edx,offset @@_BiLinearCol1-4
4840
          mov edx,offset @@_BiLinearCol1-4
4471
          sub edx,offset @@StartCode
4841
          sub edx,offset @@StartCode
4472
          mov dword ptr [ecx+edx],eax
4842
          mov dword ptr [ecx+edx],eax
4473
 
4843
 
4474
          {  @@_BiLinearCol2  }
4844
          {  @@_BiLinearCol2  }
4475
          mov eax,_BiLinearCol2; add eax,BYTE(TDXRMachine_Color.A+1)
4845
          mov eax,_BiLinearCol2; add eax,Byte(TDXRMachine_Color.A+1)
4476
          mov edx,offset @@_BiLinearCol2-4
4846
          mov edx,offset @@_BiLinearCol2-4
4477
          sub edx,offset @@StartCode
4847
          sub edx,offset @@StartCode
4478
          mov dword ptr [ecx+edx],eax
4848
          mov dword ptr [ecx+edx],eax
4479
 
4849
 
4480
          {  @@_BiLinearCol3  }
4850
          {  @@_BiLinearCol3  }
4481
          mov eax,_BiLinearCol3; add eax,BYTE(TDXRMachine_Color.A+1)
4851
          mov eax,_BiLinearCol3; add eax,Byte(TDXRMachine_Color.A+1)
4482
          mov edx,offset @@_BiLinearCol3-4
4852
          mov edx,offset @@_BiLinearCol3-4
4483
          sub edx,offset @@StartCode
4853
          sub edx,offset @@StartCode
4484
          mov dword ptr [ecx+edx],eax
4854
          mov dword ptr [ecx+edx],eax
4485
 
4855
 
4486
          {  @@_BiLinearCol4  }
4856
          {  @@_BiLinearCol4  }
4487
          mov eax,_BiLinearCol4; add eax,BYTE(TDXRMachine_Color.A+1)
4857
          mov eax,_BiLinearCol4; add eax,Byte(TDXRMachine_Color.A+1)
4488
          mov edx,offset @@_BiLinearCol4-4
4858
          mov edx,offset @@_BiLinearCol4-4
4489
          sub edx,offset @@StartCode
4859
          sub edx,offset @@StartCode
4490
          mov dword ptr [ecx+edx],eax
4860
          mov dword ptr [ecx+edx],eax
4491
 
4861
 
4492
          {  @@TexX  }
4862
          {  @@TexX  }
Line 4500... Line 4870...
4500
          mov edx,offset @@TexY-4
4870
          mov edx,offset @@TexY-4
4501
          sub edx,offset @@StartCode
4871
          sub edx,offset @@StartCode
4502
          mov dword ptr [ecx+edx],eax
4872
          mov dword ptr [ecx+edx],eax
4503
 
4873
 
4504
          {  @@Dest  }
4874
          {  @@Dest  }
4505
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
4875
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
4506
          mov edx,offset @@Dest-4
4876
          mov edx,offset @@Dest-4
4507
          sub edx,offset @@StartCode
4877
          sub edx,offset @@StartCode
4508
          mov dword ptr [ecx+edx],eax
4878
          mov dword ptr [ecx+edx],eax
4509
        end;
4879
        end;
4510
      end;
4880
      end;
Line 4512... Line 4882...
4512
  end;
4882
  end;
4513
 
4883
 
4514
  procedure genReadTexture(var Code: Pointer; Dest: PDXRMachine_Color;
4884
  procedure genReadTexture(var Code: Pointer; Dest: PDXRMachine_Color;
4515
    const Texture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
4885
    const Texture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
4516
  begin
4886
  begin
4517
    if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR] then
4887
    if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
4518
      genReadTexture_BiLinear(Code, Dest, Texture, Texture.nAxis, EnableChannels)
4888
      genReadTexture_BiLinear(Code, Dest, Texture, Texture.nAxis, EnableChannels)
4519
    else
4889
    else
4520
      genReadTexture_Nearest(Code, Dest, Texture, Texture.nAxis, EnableChannels);
4890
      genReadTexture_Nearest(Code, Dest, Texture, Texture.nAxis, EnableChannels);
4521
  end;
4891
  end;
4522
 
4892
 
-
 
4893
  procedure genReadBumpTexture_Nearest(var Code: Pointer; Dest: PDXRMachine_Color;
-
 
4894
    const Texture, BumpTexture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
-
 
4895
  var
-
 
4896
    _Axis, _Axis2, _iAxis, _BumpAxis, _BumpAxis2: PDXRMachine_Axis;
-
 
4897
    _BumpTempCol: Pointer;
-
 
4898
  begin
-
 
4899
    if EnableChannels=[] then Exit;
-
 
4900
 
-
 
4901
    _Axis := @BumpTexture.nAxis;
-
 
4902
    _Axis2 := @Texture.nAxis;
-
 
4903
    _iAxis := @BumpTexture.iAxis;
-
 
4904
    _BumpAxis := @F_BumpAxis;
-
 
4905
    _BumpAxis2 := @F_BumpAxis2;
-
 
4906
    _BumpTempCol := @F_BumpTempCol;
-
 
4907
 
-
 
4908
    {  X  }
-
 
4909
    asm
-
 
4910
      jmp @@EndCode
-
 
4911
    @@StartCode:
-
 
4912
      mov eax,dword ptr [offset _null]{}@@TexX:
-
 
4913
      mov edx,dword ptr [offset _null]{}@@TexY:
-
 
4914
      sub eax,dword ptr [offset _null]{}@@iTexX:
-
 
4915
      mov dword ptr [offset _null],edx{}@@AxisY:
-
 
4916
      mov dword ptr [offset _null],eax{}@@AxisX:
-
 
4917
    @@EndCode:
-
 
4918
      {$I DXRender.inc}
-
 
4919
      {  @@TexX  }
-
 
4920
      mov eax,_Axis; add eax,TDXRMachine_Axis.X
-
 
4921
      mov edx,offset @@TexX-4
-
 
4922
      sub edx,offset @@StartCode
-
 
4923
      mov dword ptr [ecx+edx],eax
-
 
4924
 
-
 
4925
      {  @@TexY  }
-
 
4926
      mov eax,_Axis; add eax,TDXRMachine_Axis.Y
-
 
4927
      mov edx,offset @@TexY-4
-
 
4928
      sub edx,offset @@StartCode
-
 
4929
      mov dword ptr [ecx+edx],eax
-
 
4930
 
-
 
4931
      {  @@iTexX  }
-
 
4932
      mov eax,_iAxis; add eax,TDXRMachine_Axis.X
-
 
4933
      mov edx,offset @@iTexX-4
-
 
4934
      sub edx,offset @@StartCode
-
 
4935
      mov dword ptr [ecx+edx],eax
-
 
4936
 
-
 
4937
      {  @@AxisX  }
-
 
4938
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
-
 
4939
      mov edx,offset @@AxisX-4
-
 
4940
      sub edx,offset @@StartCode
-
 
4941
      mov dword ptr [ecx+edx],eax
-
 
4942
 
-
 
4943
      {  @@AxisY  }
-
 
4944
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
-
 
4945
      mov edx,offset @@AxisY-4
-
 
4946
      sub edx,offset @@StartCode
-
 
4947
      mov dword ptr [ecx+edx],eax
-
 
4948
    end;
-
 
4949
    genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
-
 
4950
 
-
 
4951
    asm
-
 
4952
      jmp @@EndCode
-
 
4953
    @@StartCode:
-
 
4954
      mov dword ptr [offset _null],eax{}@@BumpTempCol:
-
 
4955
    @@EndCode:
-
 
4956
      {$I DXRender.inc}
-
 
4957
      {  @@BumpTempCol  }
-
 
4958
      mov eax,_BumpTempCol
-
 
4959
      mov edx,offset @@BumpTempCol-4
-
 
4960
      sub edx,offset @@StartCode
-
 
4961
      mov dword ptr [ecx+edx],eax
-
 
4962
    end;
-
 
4963
 
-
 
4964
    asm
-
 
4965
      jmp @@EndCode
-
 
4966
    @@StartCode:
-
 
4967
      mov edx,dword ptr [offset _null]{}@@iAxisX:
-
 
4968
      add dword ptr [offset _null],edx{}@@AxisX:
-
 
4969
    @@EndCode:
-
 
4970
      {$I DXRender.inc}
-
 
4971
      {  @@iAxisX  }
-
 
4972
      mov eax,_iAxis; add eax,TDXRMachine_Axis.X
-
 
4973
      mov edx,offset @@iAxisX-4
-
 
4974
      sub edx,offset @@StartCode
-
 
4975
      mov dword ptr [ecx+edx],eax
-
 
4976
 
-
 
4977
      {  @@AxisX  }
-
 
4978
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
-
 
4979
      mov edx,offset @@AxisX-4
-
 
4980
      sub edx,offset @@StartCode
-
 
4981
      mov dword ptr [ecx+edx],eax
-
 
4982
    end;
-
 
4983
 
-
 
4984
    genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
-
 
4985
 
-
 
4986
    asm
-
 
4987
      jmp @@EndCode
-
 
4988
    @@StartCode:
-
 
4989
      sub eax,dword ptr [offset _null]{}@@BumpTempCol:
-
 
4990
      sal eax,16
-
 
4991
      add eax,dword ptr [offset _null]{}@@TexX:
-
 
4992
      mov dword ptr [offset _null],eax{}@@AxisX:
-
 
4993
    @@EndCode:
-
 
4994
      {$I DXRender.inc}
-
 
4995
      {  @@BumpTempCol  }
-
 
4996
      mov eax,_BumpTempCol
-
 
4997
      mov edx,offset @@BumpTempCol-4
-
 
4998
      sub edx,offset @@StartCode
-
 
4999
      mov dword ptr [ecx+edx],eax
-
 
5000
 
-
 
5001
      {  @@TexX  }
-
 
5002
      mov eax,_Axis2; add eax,TDXRMachine_Axis.X
-
 
5003
      mov edx,offset @@TexX-4
-
 
5004
      sub edx,offset @@StartCode
-
 
5005
      mov dword ptr [ecx+edx],eax
-
 
5006
 
-
 
5007
      {  @@AxisX  }
-
 
5008
      mov eax,_BumpAxis2; add eax,TDXRMachine_Axis.X
-
 
5009
      mov edx,offset @@AxisX-4
-
 
5010
      sub edx,offset @@StartCode
-
 
5011
      mov dword ptr [ecx+edx],eax
-
 
5012
    end;
-
 
5013
 
-
 
5014
    {  Y  }
-
 
5015
    asm
-
 
5016
      jmp @@EndCode
-
 
5017
    @@StartCode:
-
 
5018
      mov eax,dword ptr [offset _null]{}@@TexX:
-
 
5019
      mov edx,dword ptr [offset _null]{}@@TexY:
-
 
5020
      sub edx,dword ptr [offset _null]{}@@iTexY:
-
 
5021
      mov dword ptr [offset _null],eax{}@@AxisX:
-
 
5022
      mov dword ptr [offset _null],edx{}@@AxisY:
-
 
5023
    @@EndCode:
-
 
5024
      {$I DXRender.inc}
-
 
5025
      {  @@TexX  }
-
 
5026
      mov eax,_Axis; add eax,TDXRMachine_Axis.X
-
 
5027
      mov edx,offset @@TexX-4
-
 
5028
      sub edx,offset @@StartCode
-
 
5029
      mov dword ptr [ecx+edx],eax
-
 
5030
 
-
 
5031
      {  @@TexY  }
-
 
5032
      mov eax,_Axis; add eax,TDXRMachine_Axis.Y
-
 
5033
      mov edx,offset @@TexY-4
-
 
5034
      sub edx,offset @@StartCode
-
 
5035
      mov dword ptr [ecx+edx],eax
-
 
5036
 
-
 
5037
      {  @@iTexY  }
-
 
5038
      mov eax,_iAxis; add eax,TDXRMachine_Axis.Y
-
 
5039
      mov edx,offset @@iTexY-4
-
 
5040
      sub edx,offset @@StartCode
-
 
5041
      mov dword ptr [ecx+edx],eax
-
 
5042
 
-
 
5043
      {  @@AxisX  }
-
 
5044
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.X
-
 
5045
      mov edx,offset @@AxisX-4
-
 
5046
      sub edx,offset @@StartCode
-
 
5047
      mov dword ptr [ecx+edx],eax
-
 
5048
 
-
 
5049
      {  @@AxisY  }
-
 
5050
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
-
 
5051
      mov edx,offset @@AxisY-4
-
 
5052
      sub edx,offset @@StartCode
-
 
5053
      mov dword ptr [ecx+edx],eax
-
 
5054
    end;
-
 
5055
    genReadSurfacePixel(Code, BumpTexture, _BumpTempCol);
-
 
5056
 
-
 
5057
    asm
-
 
5058
      jmp @@EndCode
-
 
5059
    @@StartCode:
-
 
5060
      mov dword ptr [offset _null],eax{}@@BumpTempCol:
-
 
5061
    @@EndCode:
-
 
5062
      {$I DXRender.inc}
-
 
5063
      {  @@BumpTempCol  }
-
 
5064
      mov eax,_BumpTempCol
-
 
5065
      mov edx,offset @@BumpTempCol-4
-
 
5066
      sub edx,offset @@StartCode
-
 
5067
      mov dword ptr [ecx+edx],eax
-
 
5068
    end;
-
 
5069
 
-
 
5070
    asm
-
 
5071
      jmp @@EndCode
-
 
5072
    @@StartCode:
-
 
5073
      mov edx,dword ptr [offset _null]{}@@iAxisY:
-
 
5074
      sal edx,1
-
 
5075
      sub dword ptr [offset _null],edx{}@@AxisY:
-
 
5076
    @@EndCode:
-
 
5077
      {$I DXRender.inc}
-
 
5078
      {  @@iAxisY  }
-
 
5079
      mov eax,_iAxis; add eax,TDXRMachine_Axis.Y
-
 
5080
      mov edx,offset @@iAxisY-4
-
 
5081
      sub edx,offset @@StartCode
-
 
5082
      mov dword ptr [ecx+edx],eax
-
 
5083
 
-
 
5084
      {  @@AxisY  }
-
 
5085
      mov eax,_BumpAxis; add eax,TDXRMachine_Axis.Y
-
 
5086
      mov edx,offset @@AxisY-4
-
 
5087
      sub edx,offset @@StartCode
-
 
5088
      mov dword ptr [ecx+edx],eax
-
 
5089
    end;
-
 
5090
 
-
 
5091
    genReadSurfacePixel(Code, BumpTexture, _BumpAxis);
-
 
5092
 
-
 
5093
    asm
-
 
5094
      jmp @@EndCode
-
 
5095
    @@StartCode:
-
 
5096
      sub eax,dword ptr [offset _null]{}@@BumpTempCol:
-
 
5097
      sal eax,16
-
 
5098
      add eax,dword ptr [offset _null]{}@@TexY:
-
 
5099
      mov dword ptr [offset _null],eax{}@@AxisY:
-
 
5100
    @@EndCode:
-
 
5101
      {$I DXRender.inc}
-
 
5102
      {  @@BumpTempCol  }
-
 
5103
      mov eax,_BumpTempCol
-
 
5104
      mov edx,offset @@BumpTempCol-4
-
 
5105
      sub edx,offset @@StartCode
-
 
5106
      mov dword ptr [ecx+edx],eax
-
 
5107
 
-
 
5108
      {  @@TexX  }
-
 
5109
      mov eax,_Axis2; add eax,TDXRMachine_Axis.Y
-
 
5110
      mov edx,offset @@TexY-4
-
 
5111
      sub edx,offset @@StartCode
-
 
5112
      mov dword ptr [ecx+edx],eax
-
 
5113
 
-
 
5114
      {  @@AxisX  }
-
 
5115
      mov eax,_BumpAxis2; add eax,TDXRMachine_Axis.Y
-
 
5116
      mov edx,offset @@AxisY-4
-
 
5117
      sub edx,offset @@StartCode
-
 
5118
      mov dword ptr [ecx+edx],eax
-
 
5119
    end;
-
 
5120
 
-
 
5121
    genReadTexture_Nearest(Code, Dest, Texture, _BumpAxis2^, EnableChannels);
-
 
5122
  end;
-
 
5123
 
-
 
5124
  procedure genReadBumpTexture(var Code: Pointer; Dest: PDXRMachine_Color;
-
 
5125
    const Texture, BumpTexture: TDXRMachine_Reg_Texture; EnableChannels: TDXRColorChannels);
-
 
5126
  begin
-
 
5127
    {if Texture.Filter in [DXR_TEXTUREFILTER_LINEAR, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
-
 
5128
      genReadBumpTexture_BiLinear(Code, Dest, Texture, BumpTexture, EnableChannels)
-
 
5129
    else }
-
 
5130
      genReadBumpTexture_Nearest(Code, Dest, Texture, BumpTexture, EnableChannels);
-
 
5131
  end;
-
 
5132
 
4523
  procedure genUpdateAxis(var Code: Pointer);
5133
  procedure genUpdateAxis(var Code: Pointer);
4524
  var
5134
  var
4525
    _Axis: Pointer;
5135
    _Axis: Pointer;
4526
  begin
5136
  begin
4527
    if not Axis.IncEnable then Exit;
5137
    if not Axis.IncEnable then Exit;
4528
 
5138
 
4529
    _Axis := @Axis.Axis;
5139
    _Axis := @Axis.Axis;
-
 
5140
 
4530
    asm
5141
    asm
4531
      jmp @@EndCode
5142
      jmp @@EndCode
4532
    @@StartCode:
5143
    @@StartCode:
4533
      inc dword ptr [offset _null]{}@@AxisX:
5144
      inc dword ptr [offset _null]{}@@AxisX:
4534
    @@EndCode:
5145
    @@EndCode:
Line 4653... Line 5264...
4653
      Texture := @TextureList[TextureIndex[i]];
5264
      Texture := @TextureList[TextureIndex[i]];
4654
 
5265
 
4655
      nTex := @Texture.nAxis;
5266
      nTex := @Texture.nAxis;
4656
      iTex := @Texture.iAxis;
5267
      iTex := @Texture.iAxis;
4657
 
5268
 
-
 
5269
      if UseMMX then
-
 
5270
      begin
-
 
5271
        FMMXUsed := True;
-
 
5272
        asm
-
 
5273
          jmp @@EndCode
-
 
5274
        @@StartCode:
-
 
5275
          db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
-
 
5276
                                 @@nTex:
-
 
5277
          db $0F,$FE,$05,$11,$11,$11,$11///paddd mm0,qword ptr [$11111111]
-
 
5278
                                 @@iTex:
-
 
5279
          db $0F,$7F,$05,$11,$11,$11,$11///movq qword ptr [$11111111],mm0
-
 
5280
                                 @@nTex2:
-
 
5281
        @@EndCode:
-
 
5282
          {$I DXRender.inc}
-
 
5283
          {  @@nTex  }
-
 
5284
          mov eax,nTex
-
 
5285
          mov edx,offset @@nTex-4
-
 
5286
          sub edx,offset @@StartCode
-
 
5287
          mov dword ptr [ecx+edx],eax
-
 
5288
 
-
 
5289
          {  @@nTex2  }
-
 
5290
          mov eax,nTex
-
 
5291
          mov edx,offset @@nTex2-4
-
 
5292
          sub edx,offset @@StartCode
-
 
5293
          mov dword ptr [ecx+edx],eax
-
 
5294
 
-
 
5295
          {  @@iTex  }
-
 
5296
          mov eax,iTex
-
 
5297
          mov edx,offset @@iTex-4
-
 
5298
          sub edx,offset @@StartCode
-
 
5299
          mov dword ptr [ecx+edx],eax
-
 
5300
        end;
-
 
5301
      end else
-
 
5302
      begin
4658
      if Texture.iAxisConstant then
5303
        if Texture.iAxisConstant then
4659
      begin
5304
        begin
4660
        if Texture.iAxis.X<>0 then
5305
          if Texture.iAxis.X<>0 then
4661
        begin
5306
          begin
4662
          asm
5307
            asm
Line 4697... Line 5342...
4697
            sub edx,offset @@StartCode
5342
              sub edx,offset @@StartCode
4698
            mov dword ptr [ecx+edx],eax
5343
              mov dword ptr [ecx+edx],eax
4699
          end;
5344
            end;
4700
        end;
5345
          end;
4701
      end else
5346
        end else
4702
      begin
5347
        //begin
4703
        if UseMMX then
5348
         if UseMMX then
4704
        begin
5349
         begin
4705
          FMMXUsed := True;
5350
          FMMXUsed := True;
4706
          asm
5351
          asm
4707
            jmp @@EndCode
5352
            jmp @@EndCode
Line 4732... Line 5377...
4732
            sub edx,offset @@StartCode
5377
            sub edx,offset @@StartCode
4733
            mov dword ptr [ecx+edx],eax
5378
            mov dword ptr [ecx+edx],eax
4734
          end;
5379
          end;
4735
        end else
5380
         end else
4736
        begin
5381
         begin
-
 
5382
 
4737
          asm
5383
          asm
4738
            jmp @@EndCode
5384
            jmp @@EndCode
4739
          @@StartCode:
5385
          @@StartCode:
4740
            mov eax,dword ptr [offset _Null]{}@@iTexX:
5386
            mov eax,dword ptr [offset _Null]{}@@iTexX:
4741
            mov edx,dword ptr [offset _Null]{}@@iTexY:
5387
            mov edx,dword ptr [offset _Null]{}@@iTexY:
Line 4770... Line 5416...
4770
        end;
5416
        end;
4771
      end;
5417
      end;
4772
    end;
5418
    end;
4773
  end;
5419
  end;
4774
 
5420
 
-
 
5421
  procedure genUpdateRHW(var Code: Pointer);
-
 
5422
  var
-
 
5423
    nRHW, iRHW: Pointer;
-
 
5424
  begin
-
 
5425
    if not RHW.Enable then Exit;
-
 
5426
 
-
 
5427
    nRHW := @RHW.nRHW;
-
 
5428
    iRHW := @RHW.iRHW;
-
 
5429
 
-
 
5430
    asm
-
 
5431
      jmp @@EndCode
-
 
5432
    @@StartCode:
-
 
5433
      // 64 bit addition
-
 
5434
      mov eax,dword ptr [offset _null]{}@@iRHW:
-
 
5435
      mov edx,dword ptr [offset _null]{}@@iRHW2:
-
 
5436
      add dword ptr [offset _null],eax{}@@nRHW:
-
 
5437
      adc dword ptr [offset _null],edx{}@@nRHW2:
-
 
5438
    @@EndCode:
-
 
5439
      {$I DXRender.inc}
-
 
5440
      {  @@nRHW  }
-
 
5441
      mov eax,nRHW
-
 
5442
      mov edx,offset @@nRHW-4
-
 
5443
      sub edx,offset @@StartCode
-
 
5444
      mov dword ptr [ecx+edx],eax
-
 
5445
 
-
 
5446
      {  @@nRHW2  }
-
 
5447
      mov eax,nRHW; add eax,4
-
 
5448
      mov edx,offset @@nRHW2-4
-
 
5449
      sub edx,offset @@StartCode
-
 
5450
      mov dword ptr [ecx+edx],eax
-
 
5451
 
-
 
5452
      {  @@iRHW  }
-
 
5453
      mov eax,iRHW
-
 
5454
      mov edx,offset @@iRHW-4
-
 
5455
      sub edx,offset @@StartCode
-
 
5456
      mov dword ptr [ecx+edx],eax
-
 
5457
 
-
 
5458
      {  @@iRHW  }
-
 
5459
      mov eax,iRHW; add eax,4
-
 
5460
      mov edx,offset @@iRHW2-4
-
 
5461
      sub edx,offset @@StartCode
-
 
5462
      mov dword ptr [ecx+edx],eax
-
 
5463
    end;
-
 
5464
  end;
-
 
5465
 
4775
  procedure genBlend(var Code: Pointer; Blend: TDXR_Blend;
5466
  procedure genBlend(var Code: Pointer; Blend: TDXR_Blend;
4776
    Dest, Col1, Col2: PDXRMachine_Color; EnableChannels: TDXRColorChannels;
5467
    Dest, Col1, Col2: PDXRMachine_Color; EnableChannels: TDXRColorChannels;
4777
    ConstChannels1, ConstChannels2: TDXRColorChannels);
5468
    ConstChannels1, ConstChannels2: TDXRColorChannels);
4778
 
5469
 
4779
    procedure Func_col1_Add_col2(var Code: Pointer; Dest, col1, col2: PWord);
5470
    procedure Func_col1_Add_col2(var Code: Pointer; Dest, col1, col2: PWord);
Line 4926... Line 5617...
4926
        mov edx,offset @@Col2-4
5617
        mov edx,offset @@Col2-4
4927
        sub edx,offset @@StartCode
5618
        sub edx,offset @@StartCode
4928
        mov dword ptr [ecx+edx],eax
5619
        mov dword ptr [ecx+edx],eax
4929
 
5620
 
4930
        {  @@Dest  }
5621
        {  @@Dest  }
4931
        mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
5622
        mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
4932
        mov edx,offset @@Dest-4
5623
        mov edx,offset @@Dest-4
4933
        sub edx,offset @@StartCode
5624
        sub edx,offset @@StartCode
4934
        mov dword ptr [ecx+edx],eax
5625
        mov dword ptr [ecx+edx],eax
4935
      end;
5626
      end;
4936
    end;
5627
    end;
Line 4961... Line 5652...
4961
    procedure genBlend_ONE1(var Code: Pointer; Dest, Col1: PDXRMachine_Color;
5652
    procedure genBlend_ONE1(var Code: Pointer; Dest, Col1: PDXRMachine_Color;
4962
      ConstChannels1: TDXRColorChannels);
5653
      ConstChannels1: TDXRColorChannels);
4963
    begin
5654
    begin
4964
      if Dest=Col1 then Exit;
5655
      if Dest=Col1 then Exit;
4965
 
5656
 
4966
      if UseMMX then
5657
      if UseMMX then //False then//UseMMX then
4967
      begin
5658
      begin
4968
        FMMXUsed := True;
5659
        FMMXUsed := True;
4969
        asm
5660
        asm
4970
          jmp @@EndCode
5661
          jmp @@EndCode
4971
        @@StartCode:
5662
        @@StartCode:
Line 5070... Line 5761...
5070
        asm
5761
        asm
5071
          jmp @@EndCode
5762
          jmp @@EndCode
5072
        @@StartCode:
5763
        @@StartCode:
5073
          db $0F,$6F,$05,$11,$11,$11,$11/// movq mm0,qword ptr [$11111111]
5764
          db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
5074
                                 @@Col1:
5765
                                 @@Col1:
5075
          db $0F,$DD,$05,$11,$11,$11,$11/// paddusw mm0,qword ptr [$11111111]
5766
          db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
5076
                                 @@Col2:
5767
                                 @@Col2:
-
 
5768
          db $0F,$DD,$C1      ///paddusw mm0,mm1
5077
          db $0F,$7F,$05,$11,$11,$11,$11/// movq qword ptr [$11111111],mm0
5769
          db $0F,$7F,$05,$11,$11,$11,$11///movq qword ptr [$11111111],mm0
5078
                                 @@Dest:
5770
                                 @@Dest:
5079
        @@EndCode:
5771
        @@EndCode:
5080
          {$I DXRender.inc}
5772
          {$I DXRender.inc}
5081
          {  @@Col1  }
5773
          {  @@Col1  }
Line 5154... Line 5846...
5154
            Func_col1_Add_col2(Code, @Dest.A, @Col1.A, @Col2.A);
5846
            Func_col1_Add_col2(Code, @Dest.A, @Col1.A, @Col2.A);
5155
        end;
5847
        end;
5156
      end;
5848
      end;
5157
    end;
5849
    end;
5158
 
5850
 
-
 
5851
    procedure genBlend_ONE2_SUB_ONE1(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
-
 
5852
      ConstChannels1, ConstChannels12: TDXRColorChannels);
-
 
5853
    begin
-
 
5854
      if UseMMX then
-
 
5855
      begin
-
 
5856
        FMMXUsed := True;
-
 
5857
        asm
-
 
5858
          jmp @@EndCode
-
 
5859
        @@StartCode:
-
 
5860
          db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
-
 
5861
                                 @@Col1:
-
 
5862
          db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
-
 
5863
                                 @@Col2:
-
 
5864
          db $0F,$D9,$C8      ///psubusw mm1,mm0
-
 
5865
          db $0F,$7F,$0D,$11,$11,$11,$11///movq qword ptr [$11111111],mm1
-
 
5866
                                 @@Dest:
-
 
5867
        @@EndCode:
-
 
5868
          {$I DXRender.inc}
-
 
5869
          {  @@Col1  }
-
 
5870
          mov eax,Col1
-
 
5871
          mov edx,offset @@Col1-4
-
 
5872
          sub edx,offset @@StartCode
-
 
5873
          mov dword ptr [ecx+edx],eax
-
 
5874
 
-
 
5875
          {  @@Col2  }
-
 
5876
          mov eax,Col2
-
 
5877
          mov edx,offset @@Col2-4
-
 
5878
          sub edx,offset @@StartCode
-
 
5879
          mov dword ptr [ecx+edx],eax
-
 
5880
 
-
 
5881
          {  @@Dest  }
-
 
5882
          mov eax,Dest
-
 
5883
          mov edx,offset @@Dest-4
-
 
5884
          sub edx,offset @@StartCode
-
 
5885
          mov dword ptr [ecx+edx],eax
-
 
5886
        end;
-
 
5887
      end else
-
 
5888
      begin
-
 
5889
        { Red Channel }
-
 
5890
        if chRed in EnableChannels then
-
 
5891
        begin
-
 
5892
          if chRed in ConstChannels1 then
-
 
5893
          begin
-
 
5894
            Func_col1_Sub_const2(Code, @Dest.R, @Col2.R, @Col1.R);
-
 
5895
          end else
-
 
5896
          if chRed in ConstChannels2 then
-
 
5897
          begin
-
 
5898
            Func_const1_Sub_col2(Code, @Dest.R, @Col1.R, @Col2.R);
-
 
5899
          end else
-
 
5900
            Func_col1_Sub_col2(Code, @Dest.R, @Col2.R, @Col1.R);
-
 
5901
        end;
-
 
5902
 
-
 
5903
        { Green Channel }
-
 
5904
        if chRed in EnableChannels then
-
 
5905
        begin
-
 
5906
          if chRed in ConstChannels1 then
-
 
5907
          begin
-
 
5908
            Func_col1_Sub_const2(Code, @Dest.G, @Col2.G, @Col1.G);
-
 
5909
          end else
-
 
5910
          if chRed in ConstChannels2 then
-
 
5911
          begin
-
 
5912
            Func_const1_Sub_col2(Code, @Dest.G, @Col1.G, @Col2.G);
-
 
5913
          end else
-
 
5914
            Func_col1_Sub_col2(Code, @Dest.G, @Col2.G, @Col1.G);
-
 
5915
        end;
-
 
5916
 
-
 
5917
        { Blue Channel }
-
 
5918
        if chRed in EnableChannels then
-
 
5919
        begin
-
 
5920
          if chRed in ConstChannels1 then
-
 
5921
          begin
-
 
5922
            Func_col1_Sub_const2(Code, @Dest.B, @Col2.B, @Col1.B);
-
 
5923
          end else
-
 
5924
          if chRed in ConstChannels2 then
-
 
5925
          begin
-
 
5926
            Func_const1_Sub_col2(Code, @Dest.B, @Col1.B, @Col2.B);
-
 
5927
          end else
-
 
5928
            Func_col1_Sub_col2(Code, @Dest.B, @Col2.B, @Col1.B);
-
 
5929
        end;
-
 
5930
 
-
 
5931
        { Alpha Channel }
-
 
5932
        if chRed in EnableChannels then
-
 
5933
        begin
-
 
5934
          if chRed in ConstChannels1 then
-
 
5935
          begin
-
 
5936
            Func_col1_Sub_const2(Code, @Dest.A, @Col2.A, @Col1.A);
-
 
5937
          end else
-
 
5938
          if chRed in ConstChannels2 then
-
 
5939
          begin
-
 
5940
            Func_const1_Sub_col2(Code, @Dest.A, @Col1.A, @Col2.A);
-
 
5941
          end else
-
 
5942
            Func_col1_Sub_col2(Code, @Dest.A, @Col2.A, @Col1.A);
-
 
5943
        end;
-
 
5944
      end;
-
 
5945
    end;
-
 
5946
 
5159
    procedure genBlend_ONE1_SUB_ONE2(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
5947
    procedure genBlend_ONE1_SUB_ONE2(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
5160
      ConstChannels1, ConstChannels12: TDXRColorChannels);
5948
      ConstChannels1, ConstChannels12: TDXRColorChannels);
5161
    begin
5949
    begin
5162
      if UseMMX then
5950
      if UseMMX then
5163
      begin
5951
      begin
Line 5301... Line 6089...
5301
            mul byte ptr [offset offset _null]   {}@@Col2:
6089
            mul byte ptr [offset offset _null]   {}@@Col2:
5302
            mov byte ptr [offset offset _null],ah{}@@Dest:
6090
            mov byte ptr [offset offset _null],ah{}@@Dest:
5303
          @@EndCode:
6091
          @@EndCode:
5304
            {$I DXRender.inc}
6092
            {$I DXRender.inc}
5305
            {  @@Col1  }
6093
            {  @@Col1  }
5306
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6094
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
5307
            mov edx,offset @@Col1-4
6095
            mov edx,offset @@Col1-4
5308
            sub edx,offset @@StartCode
6096
            sub edx,offset @@StartCode
5309
            mov dword ptr [ecx+edx],eax
6097
            mov dword ptr [ecx+edx],eax
5310
 
6098
 
5311
            {  @@Col2  }
6099
            {  @@Col2  }
5312
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
6100
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
5313
            mov edx,offset @@Col2-4
6101
            mov edx,offset @@Col2-4
5314
            sub edx,offset @@StartCode
6102
            sub edx,offset @@StartCode
5315
            mov dword ptr [ecx+edx],eax
6103
            mov dword ptr [ecx+edx],eax
5316
 
6104
 
5317
            {  @@Dest  }
6105
            {  @@Dest  }
5318
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6106
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
5319
            mov edx,offset @@Dest-4
6107
            mov edx,offset @@Dest-4
5320
            sub edx,offset @@StartCode
6108
            sub edx,offset @@StartCode
5321
            mov dword ptr [ecx+edx],eax
6109
            mov dword ptr [ecx+edx],eax
5322
          end;
6110
          end;
5323
        end;
6111
        end;
Line 5331... Line 6119...
5331
            mul byte ptr [offset offset _null]   {}@@Col2:
6119
            mul byte ptr [offset offset _null]   {}@@Col2:
5332
            mov byte ptr [offset offset _null],ah{}@@Dest:
6120
            mov byte ptr [offset offset _null],ah{}@@Dest:
5333
          @@EndCode:
6121
          @@EndCode:
5334
            {$I DXRender.inc}
6122
            {$I DXRender.inc}
5335
            {  @@Col1  }
6123
            {  @@Col1  }
5336
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
6124
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
5337
            mov edx,offset @@Col1-4
6125
            mov edx,offset @@Col1-4
5338
            sub edx,offset @@StartCode
6126
            sub edx,offset @@StartCode
5339
            mov dword ptr [ecx+edx],eax
6127
            mov dword ptr [ecx+edx],eax
5340
 
6128
 
5341
            {  @@Col2  }
6129
            {  @@Col2  }
5342
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
6130
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
5343
            mov edx,offset @@Col2-4
6131
            mov edx,offset @@Col2-4
5344
            sub edx,offset @@StartCode
6132
            sub edx,offset @@StartCode
5345
            mov dword ptr [ecx+edx],eax
6133
            mov dword ptr [ecx+edx],eax
5346
 
6134
 
5347
            {  @@Dest  }
6135
            {  @@Dest  }
5348
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
6136
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
5349
            mov edx,offset @@Dest-4
6137
            mov edx,offset @@Dest-4
5350
            sub edx,offset @@StartCode
6138
            sub edx,offset @@StartCode
5351
            mov dword ptr [ecx+edx],eax
6139
            mov dword ptr [ecx+edx],eax
5352
          end;
6140
          end;
5353
        end;
6141
        end;
Line 5361... Line 6149...
5361
            mul byte ptr [offset offset _null]   {}@@Col2:
6149
            mul byte ptr [offset offset _null]   {}@@Col2:
5362
            mov byte ptr [offset offset _null],ah{}@@Dest:
6150
            mov byte ptr [offset offset _null],ah{}@@Dest:
5363
          @@EndCode:
6151
          @@EndCode:
5364
            {$I DXRender.inc}
6152
            {$I DXRender.inc}
5365
            {  @@Col1  }
6153
            {  @@Col1  }
5366
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
6154
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
5367
            mov edx,offset @@Col1-4
6155
            mov edx,offset @@Col1-4
5368
            sub edx,offset @@StartCode
6156
            sub edx,offset @@StartCode
5369
            mov dword ptr [ecx+edx],eax
6157
            mov dword ptr [ecx+edx],eax
5370
 
6158
 
5371
            {  @@Col2  }
6159
            {  @@Col2  }
5372
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
6160
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
5373
            mov edx,offset @@Col2-4
6161
            mov edx,offset @@Col2-4
5374
            sub edx,offset @@StartCode
6162
            sub edx,offset @@StartCode
5375
            mov dword ptr [ecx+edx],eax
6163
            mov dword ptr [ecx+edx],eax
5376
 
6164
 
5377
            {  @@Dest  }
6165
            {  @@Dest  }
5378
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
6166
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
5379
            mov edx,offset @@Dest-4
6167
            mov edx,offset @@Dest-4
5380
            sub edx,offset @@StartCode
6168
            sub edx,offset @@StartCode
5381
            mov dword ptr [ecx+edx],eax
6169
            mov dword ptr [ecx+edx],eax
5382
          end;
6170
          end;
5383
        end;
6171
        end;
Line 5391... Line 6179...
5391
            mul byte ptr [offset offset _null]   {}@@Col2:
6179
            mul byte ptr [offset offset _null]   {}@@Col2:
5392
            mov byte ptr [offset offset _null],ah{}@@Dest:
6180
            mov byte ptr [offset offset _null],ah{}@@Dest:
5393
          @@EndCode:
6181
          @@EndCode:
5394
            {$I DXRender.inc}
6182
            {$I DXRender.inc}
5395
            {  @@Col1  }
6183
            {  @@Col1  }
5396
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6184
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5397
            mov edx,offset @@Col1-4
6185
            mov edx,offset @@Col1-4
5398
            sub edx,offset @@StartCode
6186
            sub edx,offset @@StartCode
5399
            mov dword ptr [ecx+edx],eax
6187
            mov dword ptr [ecx+edx],eax
5400
 
6188
 
5401
            {  @@Col2  }
6189
            {  @@Col2  }
5402
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
6190
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
5403
            mov edx,offset @@Col2-4
6191
            mov edx,offset @@Col2-4
5404
            sub edx,offset @@StartCode
6192
            sub edx,offset @@StartCode
5405
            mov dword ptr [ecx+edx],eax
6193
            mov dword ptr [ecx+edx],eax
5406
 
6194
 
5407
            {  @@Dest  }
6195
            {  @@Dest  }
5408
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
6196
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
5409
            mov edx,offset @@Dest-4
6197
            mov edx,offset @@Dest-4
5410
            sub edx,offset @@StartCode
6198
            sub edx,offset @@StartCode
5411
            mov dword ptr [ecx+edx],eax
6199
            mov dword ptr [ecx+edx],eax
5412
          end;
6200
          end;
5413
        end;
6201
        end;
Line 5422... Line 6210...
5422
      @@StartCode:
6210
      @@StartCode:
5423
        movzx ebx,byte ptr [offset _null]{}@@Col1:
6211
        movzx ebx,byte ptr [offset _null]{}@@Col1:
5424
      @@EndCode:
6212
      @@EndCode:
5425
        {$I DXRender.inc}
6213
        {$I DXRender.inc}
5426
        {  @@Col1  }
6214
        {  @@Col1  }
5427
        mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6215
        mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5428
        mov edx,offset @@Col1-4
6216
        mov edx,offset @@Col1-4
5429
        sub edx,offset @@StartCode
6217
        sub edx,offset @@StartCode
5430
        mov dword ptr [ecx+edx],eax
6218
        mov dword ptr [ecx+edx],eax
5431
      end;
6219
      end;
5432
 
6220
 
Line 5465... Line 6253...
5465
            imul eax,ebx
6253
            imul eax,ebx
5466
            mov byte ptr [offset _null],ah{}@@Dest:
6254
            mov byte ptr [offset _null],ah{}@@Dest:
5467
          @@EndCode:
6255
          @@EndCode:
5468
            {$I DXRender.inc}
6256
            {$I DXRender.inc}
5469
            {  @@Col1  }
6257
            {  @@Col1  }
5470
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6258
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
5471
            mov edx,offset @@Col1-4
6259
            mov edx,offset @@Col1-4
5472
            sub edx,offset @@StartCode
6260
            sub edx,offset @@StartCode
5473
            mov dword ptr [ecx+edx],eax
6261
            mov dword ptr [ecx+edx],eax
5474
 
6262
 
5475
            {  @@Dest  }
6263
            {  @@Dest  }
5476
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6264
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
5477
            mov edx,offset @@Dest-4
6265
            mov edx,offset @@Dest-4
5478
            sub edx,offset @@StartCode
6266
            sub edx,offset @@StartCode
5479
            mov dword ptr [ecx+edx],eax
6267
            mov dword ptr [ecx+edx],eax
5480
          end;
6268
          end;
5481
        end;
6269
        end;
Line 5489... Line 6277...
5489
            imul eax,ebx
6277
            imul eax,ebx
5490
            mov byte ptr [offset _null],ah{}@@Dest:
6278
            mov byte ptr [offset _null],ah{}@@Dest:
5491
          @@EndCode:
6279
          @@EndCode:
5492
            {$I DXRender.inc}
6280
            {$I DXRender.inc}
5493
            {  @@Col1  }
6281
            {  @@Col1  }
5494
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
6282
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
5495
            mov edx,offset @@Col1-4
6283
            mov edx,offset @@Col1-4
5496
            sub edx,offset @@StartCode
6284
            sub edx,offset @@StartCode
5497
            mov dword ptr [ecx+edx],eax
6285
            mov dword ptr [ecx+edx],eax
5498
 
6286
 
5499
            {  @@Dest  }
6287
            {  @@Dest  }
5500
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
6288
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
5501
            mov edx,offset @@Dest-4
6289
            mov edx,offset @@Dest-4
5502
            sub edx,offset @@StartCode
6290
            sub edx,offset @@StartCode
5503
            mov dword ptr [ecx+edx],eax
6291
            mov dword ptr [ecx+edx],eax
5504
          end;
6292
          end;
5505
        end;
6293
        end;
Line 5540... Line 6328...
5540
            imul eax,ebx
6328
            imul eax,ebx
5541
            mov byte ptr [offset _null],ah{}@@Dest:
6329
            mov byte ptr [offset _null],ah{}@@Dest:
5542
          @@EndCode:
6330
          @@EndCode:
5543
            {$I DXRender.inc}
6331
            {$I DXRender.inc}
5544
            {  @@Col1  }
6332
            {  @@Col1  }
5545
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
6333
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
5546
            mov edx,offset @@Col1-4
6334
            mov edx,offset @@Col1-4
5547
            sub edx,offset @@StartCode
6335
            sub edx,offset @@StartCode
5548
            mov dword ptr [ecx+edx],eax
6336
            mov dword ptr [ecx+edx],eax
5549
 
6337
 
5550
            {  @@Dest  }
6338
            {  @@Dest  }
5551
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
6339
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
5552
            mov edx,offset @@Dest-4
6340
            mov edx,offset @@Dest-4
5553
            sub edx,offset @@StartCode
6341
            sub edx,offset @@StartCode
5554
            mov dword ptr [ecx+edx],eax
6342
            mov dword ptr [ecx+edx],eax
5555
          end;
6343
          end;
5556
        end;
6344
        end;
Line 5564... Line 6352...
5564
            imul eax,ebx
6352
            imul eax,ebx
5565
            mov byte ptr [offset _null],ah{}@@Dest:
6353
            mov byte ptr [offset _null],ah{}@@Dest:
5566
          @@EndCode:
6354
          @@EndCode:
5567
            {$I DXRender.inc}
6355
            {$I DXRender.inc}
5568
            {  @@Col1  }
6356
            {  @@Col1  }
5569
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6357
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5570
            mov edx,offset @@Col1-4
6358
            mov edx,offset @@Col1-4
5571
            sub edx,offset @@StartCode
6359
            sub edx,offset @@StartCode
5572
            mov dword ptr [ecx+edx],eax
6360
            mov dword ptr [ecx+edx],eax
5573
 
6361
 
5574
            {  @@Dest  }
6362
            {  @@Dest  }
5575
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
6363
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
5576
            mov edx,offset @@Dest-4
6364
            mov edx,offset @@Dest-4
5577
            sub edx,offset @@StartCode
6365
            sub edx,offset @@StartCode
5578
            mov dword ptr [ecx+edx],eax
6366
            mov dword ptr [ecx+edx],eax
5579
          end;
6367
          end;
5580
        end;
6368
        end;
Line 5589... Line 6377...
5589
      @@StartCode:
6377
      @@StartCode:
5590
        movzx ebx,byte ptr [offset _null]{}@@Col1:
6378
        movzx ebx,byte ptr [offset _null]{}@@Col1:
5591
      @@EndCode:
6379
      @@EndCode:
5592
        {$I DXRender.inc}
6380
        {$I DXRender.inc}
5593
        {  @@Col1  }
6381
        {  @@Col1  }
5594
        mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6382
        mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5595
        mov edx,offset @@Col1-4
6383
        mov edx,offset @@Col1-4
5596
        sub edx,offset @@StartCode
6384
        sub edx,offset @@StartCode
5597
        mov dword ptr [ecx+edx],eax
6385
        mov dword ptr [ecx+edx],eax
5598
      end;
6386
      end;
5599
 
6387
 
Line 5609... Line 6397...
5609
          mov al,byte ptr [offset (_AddTable + eax + edx)]
6397
          mov al,byte ptr [offset (_AddTable + eax + edx)]
5610
          mov byte ptr [offset _null],al{}@@Dest:
6398
          mov byte ptr [offset _null],al{}@@Dest:
5611
        @@EndCode:
6399
        @@EndCode:
5612
          {$I DXRender.inc}
6400
          {$I DXRender.inc}
5613
          {  @@Col1  }
6401
          {  @@Col1  }
5614
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6402
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
5615
          mov edx,offset @@Col1-4
6403
          mov edx,offset @@Col1-4
5616
          sub edx,offset @@StartCode
6404
          sub edx,offset @@StartCode
5617
          mov dword ptr [ecx+edx],eax
6405
          mov dword ptr [ecx+edx],eax
5618
 
6406
 
5619
          {  @@Col2  }
6407
          {  @@Col2  }
5620
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
6408
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
5621
          mov edx,offset @@Col2-4
6409
          mov edx,offset @@Col2-4
5622
          sub edx,offset @@StartCode
6410
          sub edx,offset @@StartCode
5623
          mov dword ptr [ecx+edx],eax
6411
          mov dword ptr [ecx+edx],eax
5624
 
6412
 
5625
          {  @@Dest  }
6413
          {  @@Dest  }
5626
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6414
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
5627
          mov edx,offset @@Dest-4
6415
          mov edx,offset @@Dest-4
5628
          sub edx,offset @@StartCode
6416
          sub edx,offset @@StartCode
5629
          mov dword ptr [ecx+edx],eax
6417
          mov dword ptr [ecx+edx],eax
5630
        end;
6418
        end;
5631
      end;
6419
      end;
Line 5642... Line 6430...
5642
          mov al,byte ptr [offset (_AddTable + eax + edx)]
6430
          mov al,byte ptr [offset (_AddTable + eax + edx)]
5643
          mov byte ptr [offset _null],al{}@@Dest:
6431
          mov byte ptr [offset _null],al{}@@Dest:
5644
        @@EndCode:
6432
        @@EndCode:
5645
          {$I DXRender.inc}
6433
          {$I DXRender.inc}
5646
          {  @@Col1  }
6434
          {  @@Col1  }
5647
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
6435
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
5648
          mov edx,offset @@Col1-4
6436
          mov edx,offset @@Col1-4
5649
          sub edx,offset @@StartCode
6437
          sub edx,offset @@StartCode
5650
          mov dword ptr [ecx+edx],eax
6438
          mov dword ptr [ecx+edx],eax
5651
 
6439
 
5652
          {  @@Col2  }
6440
          {  @@Col2  }
5653
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
6441
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
5654
          mov edx,offset @@Col2-4
6442
          mov edx,offset @@Col2-4
5655
          sub edx,offset @@StartCode
6443
          sub edx,offset @@StartCode
5656
          mov dword ptr [ecx+edx],eax
6444
          mov dword ptr [ecx+edx],eax
5657
 
6445
 
5658
          {  @@Dest  }
6446
          {  @@Dest  }
5659
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
6447
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
5660
          mov edx,offset @@Dest-4
6448
          mov edx,offset @@Dest-4
5661
          sub edx,offset @@StartCode
6449
          sub edx,offset @@StartCode
5662
          mov dword ptr [ecx+edx],eax
6450
          mov dword ptr [ecx+edx],eax
5663
        end;
6451
        end;
5664
      end;
6452
      end;
Line 5675... Line 6463...
5675
          mov al,byte ptr [offset (_AddTable + eax + edx)]
6463
          mov al,byte ptr [offset (_AddTable + eax + edx)]
5676
          mov byte ptr [offset _null],al{}@@Dest:
6464
          mov byte ptr [offset _null],al{}@@Dest:
5677
        @@EndCode:
6465
        @@EndCode:
5678
          {$I DXRender.inc}
6466
          {$I DXRender.inc}
5679
          {  @@Col1  }
6467
          {  @@Col1  }
5680
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
6468
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
5681
          mov edx,offset @@Col1-4
6469
          mov edx,offset @@Col1-4
5682
          sub edx,offset @@StartCode
6470
          sub edx,offset @@StartCode
5683
          mov dword ptr [ecx+edx],eax
6471
          mov dword ptr [ecx+edx],eax
5684
 
6472
 
5685
          {  @@Col2  }
6473
          {  @@Col2  }
5686
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
6474
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
5687
          mov edx,offset @@Col2-4
6475
          mov edx,offset @@Col2-4
5688
          sub edx,offset @@StartCode
6476
          sub edx,offset @@StartCode
5689
          mov dword ptr [ecx+edx],eax
6477
          mov dword ptr [ecx+edx],eax
5690
 
6478
 
5691
          {  @@Dest  }
6479
          {  @@Dest  }
5692
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
6480
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
5693
          mov edx,offset @@Dest-4
6481
          mov edx,offset @@Dest-4
5694
          sub edx,offset @@StartCode
6482
          sub edx,offset @@StartCode
5695
          mov dword ptr [ecx+edx],eax
6483
          mov dword ptr [ecx+edx],eax
5696
        end;
6484
        end;
5697
      end;
6485
      end;
Line 5708... Line 6496...
5708
          mov al,byte ptr [offset (_AddTable + eax + edx)]
6496
          mov al,byte ptr [offset (_AddTable + eax + edx)]
5709
          mov byte ptr [offset _null],al{}@@Dest:
6497
          mov byte ptr [offset _null],al{}@@Dest:
5710
        @@EndCode:
6498
        @@EndCode:
5711
          {$I DXRender.inc}
6499
          {$I DXRender.inc}
5712
          {  @@Col1  }
6500
          {  @@Col1  }
5713
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6501
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5714
          mov edx,offset @@Col1-4
6502
          mov edx,offset @@Col1-4
5715
          sub edx,offset @@StartCode
6503
          sub edx,offset @@StartCode
5716
          mov dword ptr [ecx+edx],eax
6504
          mov dword ptr [ecx+edx],eax
5717
 
6505
 
5718
          {  @@Col2  }
6506
          {  @@Col2  }
5719
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
6507
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
5720
          mov edx,offset @@Col2-4
6508
          mov edx,offset @@Col2-4
5721
          sub edx,offset @@StartCode
6509
          sub edx,offset @@StartCode
5722
          mov dword ptr [ecx+edx],eax
6510
          mov dword ptr [ecx+edx],eax
5723
 
6511
 
5724
          {  @@Dest  }
6512
          {  @@Dest  }
5725
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
6513
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
5726
          mov edx,offset @@Dest-4
6514
          mov edx,offset @@Dest-4
5727
          sub edx,offset @@StartCode
6515
          sub edx,offset @@StartCode
5728
          mov dword ptr [ecx+edx],eax
6516
          mov dword ptr [ecx+edx],eax
5729
        end;
6517
        end;
5730
      end;
6518
      end;
Line 5738... Line 6526...
5738
      @@StartCode:
6526
      @@StartCode:
5739
        movzx ebx,byte ptr [offset _null]{}@@Col1:
6527
        movzx ebx,byte ptr [offset _null]{}@@Col1:
5740
      @@EndCode:
6528
      @@EndCode:
5741
        {$I DXRender.inc}
6529
        {$I DXRender.inc}
5742
        {  @@Col1  }
6530
        {  @@Col1  }
5743
        mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6531
        mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5744
        mov edx,offset @@Col1-4
6532
        mov edx,offset @@Col1-4
5745
        sub edx,offset @@StartCode
6533
        sub edx,offset @@StartCode
5746
        mov dword ptr [ecx+edx],eax
6534
        mov dword ptr [ecx+edx],eax
5747
      end;
6535
      end;
5748
 
6536
 
Line 5759... Line 6547...
5759
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
6547
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
5760
          mov byte ptr [offset _null],al{}@@Dest:
6548
          mov byte ptr [offset _null],al{}@@Dest:
5761
        @@EndCode:
6549
        @@EndCode:
5762
          {$I DXRender.inc}
6550
          {$I DXRender.inc}
5763
          {  @@Col1  }
6551
          {  @@Col1  }
5764
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6552
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
5765
          mov edx,offset @@Col1-4
6553
          mov edx,offset @@Col1-4
5766
          sub edx,offset @@StartCode
6554
          sub edx,offset @@StartCode
5767
          mov dword ptr [ecx+edx],eax
6555
          mov dword ptr [ecx+edx],eax
5768
 
6556
 
5769
          {  @@Col2  }
6557
          {  @@Col2  }
5770
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
6558
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
5771
          mov edx,offset @@Col2-4
6559
          mov edx,offset @@Col2-4
5772
          sub edx,offset @@StartCode
6560
          sub edx,offset @@StartCode
5773
          mov dword ptr [ecx+edx],eax
6561
          mov dword ptr [ecx+edx],eax
5774
 
6562
 
5775
          {  @@Dest  }
6563
          {  @@Dest  }
5776
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6564
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
5777
          mov edx,offset @@Dest-4
6565
          mov edx,offset @@Dest-4
5778
          sub edx,offset @@StartCode
6566
          sub edx,offset @@StartCode
5779
          mov dword ptr [ecx+edx],eax
6567
          mov dword ptr [ecx+edx],eax
5780
        end;
6568
        end;
5781
      end;
6569
      end;
Line 5793... Line 6581...
5793
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
6581
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
5794
          mov byte ptr [offset _null],al{}@@Dest:
6582
          mov byte ptr [offset _null],al{}@@Dest:
5795
        @@EndCode:
6583
        @@EndCode:
5796
          {$I DXRender.inc}
6584
          {$I DXRender.inc}
5797
          {  @@Col1  }
6585
          {  @@Col1  }
5798
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
6586
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
5799
          mov edx,offset @@Col1-4
6587
          mov edx,offset @@Col1-4
5800
          sub edx,offset @@StartCode
6588
          sub edx,offset @@StartCode
5801
          mov dword ptr [ecx+edx],eax
6589
          mov dword ptr [ecx+edx],eax
5802
 
6590
 
5803
          {  @@Col2  }
6591
          {  @@Col2  }
5804
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
6592
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
5805
          mov edx,offset @@Col2-4
6593
          mov edx,offset @@Col2-4
5806
          sub edx,offset @@StartCode
6594
          sub edx,offset @@StartCode
5807
          mov dword ptr [ecx+edx],eax
6595
          mov dword ptr [ecx+edx],eax
5808
 
6596
 
5809
          {  @@Dest  }
6597
          {  @@Dest  }
5810
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
6598
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
5811
          mov edx,offset @@Dest-4
6599
          mov edx,offset @@Dest-4
5812
          sub edx,offset @@StartCode
6600
          sub edx,offset @@StartCode
5813
          mov dword ptr [ecx+edx],eax
6601
          mov dword ptr [ecx+edx],eax
5814
        end;
6602
        end;
5815
      end;
6603
      end;
Line 5827... Line 6615...
5827
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
6615
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
5828
          mov byte ptr [offset _null],al{}@@Dest:
6616
          mov byte ptr [offset _null],al{}@@Dest:
5829
        @@EndCode:
6617
        @@EndCode:
5830
          {$I DXRender.inc}
6618
          {$I DXRender.inc}
5831
          {  @@Col1  }
6619
          {  @@Col1  }
5832
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
6620
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
5833
          mov edx,offset @@Col1-4
6621
          mov edx,offset @@Col1-4
5834
          sub edx,offset @@StartCode
6622
          sub edx,offset @@StartCode
5835
          mov dword ptr [ecx+edx],eax
6623
          mov dword ptr [ecx+edx],eax
5836
 
6624
 
5837
          {  @@Col2  }
6625
          {  @@Col2  }
5838
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
6626
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
5839
          mov edx,offset @@Col2-4
6627
          mov edx,offset @@Col2-4
5840
          sub edx,offset @@StartCode
6628
          sub edx,offset @@StartCode
5841
          mov dword ptr [ecx+edx],eax
6629
          mov dword ptr [ecx+edx],eax
5842
 
6630
 
5843
          {  @@Dest  }
6631
          {  @@Dest  }
5844
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
6632
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
5845
          mov edx,offset @@Dest-4
6633
          mov edx,offset @@Dest-4
5846
          sub edx,offset @@StartCode
6634
          sub edx,offset @@StartCode
5847
          mov dword ptr [ecx+edx],eax
6635
          mov dword ptr [ecx+edx],eax
5848
        end;
6636
        end;
5849
      end;
6637
      end;
Line 5861... Line 6649...
5861
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
6649
          mov al,byte ptr [offset (_SubTable + 255 + edx)]
5862
          mov byte ptr [offset _null],al{}@@Dest:
6650
          mov byte ptr [offset _null],al{}@@Dest:
5863
        @@EndCode:
6651
        @@EndCode:
5864
          {$I DXRender.inc}
6652
          {$I DXRender.inc}
5865
          {  @@Col1  }
6653
          {  @@Col1  }
5866
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6654
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5867
          mov edx,offset @@Col1-4
6655
          mov edx,offset @@Col1-4
5868
          sub edx,offset @@StartCode
6656
          sub edx,offset @@StartCode
5869
          mov dword ptr [ecx+edx],eax
6657
          mov dword ptr [ecx+edx],eax
5870
 
6658
 
5871
          {  @@Col2  }
6659
          {  @@Col2  }
5872
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
6660
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
5873
          mov edx,offset @@Col2-4
6661
          mov edx,offset @@Col2-4
5874
          sub edx,offset @@StartCode
6662
          sub edx,offset @@StartCode
5875
          mov dword ptr [ecx+edx],eax
6663
          mov dword ptr [ecx+edx],eax
5876
 
6664
 
5877
          {  @@Dest  }
6665
          {  @@Dest  }
5878
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
6666
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
5879
          mov edx,offset @@Dest-4
6667
          mov edx,offset @@Dest-4
5880
          sub edx,offset @@StartCode
6668
          sub edx,offset @@StartCode
5881
          mov dword ptr [ecx+edx],eax
6669
          mov dword ptr [ecx+edx],eax
5882
        end;
6670
        end;
5883
      end;
6671
      end;
Line 5893... Line 6681...
5893
        mov ebp,ebx
6681
        mov ebp,ebx
5894
        xor ebp,$FF
6682
        xor ebp,$FF
5895
      @@EndCode:
6683
      @@EndCode:
5896
        {$I DXRender.inc}
6684
        {$I DXRender.inc}
5897
        {  @@Col1  }
6685
        {  @@Col1  }
5898
        mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6686
        mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
5899
        mov edx,offset @@Col1-4
6687
        mov edx,offset @@Col1-4
5900
        sub edx,offset @@StartCode
6688
        sub edx,offset @@StartCode
5901
        mov dword ptr [ecx+edx],eax
6689
        mov dword ptr [ecx+edx],eax
5902
      end;
6690
      end;
5903
                       
6691
                       
Line 5951... Line 6739...
5951
            add eax,edx
6739
            add eax,edx
5952
            mov byte ptr [offset _null],al{}@@Dest:
6740
            mov byte ptr [offset _null],al{}@@Dest:
5953
          @@EndCode:
6741
          @@EndCode:
5954
            {$I DXRender.inc}
6742
            {$I DXRender.inc}
5955
            {  @@Col1  }
6743
            {  @@Col1  }
5956
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6744
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
5957
            mov edx,offset @@Col1-4
6745
            mov edx,offset @@Col1-4
5958
            sub edx,offset @@StartCode
6746
            sub edx,offset @@StartCode
5959
            mov dword ptr [ecx+edx],eax
6747
            mov dword ptr [ecx+edx],eax
5960
 
6748
 
5961
            {  @@Col2  }
6749
            {  @@Col2  }
5962
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
6750
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
5963
            mov edx,offset @@Col2-4
6751
            mov edx,offset @@Col2-4
5964
            sub edx,offset @@StartCode
6752
            sub edx,offset @@StartCode
5965
            mov dword ptr [ecx+edx],eax
6753
            mov dword ptr [ecx+edx],eax
5966
 
6754
 
5967
            {  @@Dest  }
6755
            {  @@Dest  }
5968
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6756
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
5969
            mov edx,offset @@Dest-4
6757
            mov edx,offset @@Dest-4
5970
            sub edx,offset @@StartCode
6758
            sub edx,offset @@StartCode
5971
            mov dword ptr [ecx+edx],eax
6759
            mov dword ptr [ecx+edx],eax
5972
          end;
6760
          end;
5973
        end;
6761
        end;
Line 5985... Line 6773...
5985
            add eax,edx
6773
            add eax,edx
5986
            mov byte ptr [offset _null],al{}@@Dest:
6774
            mov byte ptr [offset _null],al{}@@Dest:
5987
          @@EndCode:
6775
          @@EndCode:
5988
            {$I DXRender.inc}
6776
            {$I DXRender.inc}
5989
            {  @@Col1  }
6777
            {  @@Col1  }
5990
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
6778
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
5991
            mov edx,offset @@Col1-4
6779
            mov edx,offset @@Col1-4
5992
            sub edx,offset @@StartCode
6780
            sub edx,offset @@StartCode
5993
            mov dword ptr [ecx+edx],eax
6781
            mov dword ptr [ecx+edx],eax
5994
 
6782
 
5995
            {  @@Col2  }
6783
            {  @@Col2  }
5996
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
6784
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
5997
            mov edx,offset @@Col2-4
6785
            mov edx,offset @@Col2-4
5998
            sub edx,offset @@StartCode
6786
            sub edx,offset @@StartCode
5999
            mov dword ptr [ecx+edx],eax
6787
            mov dword ptr [ecx+edx],eax
6000
 
6788
 
6001
            {  @@Dest  }
6789
            {  @@Dest  }
6002
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
6790
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
6003
            mov edx,offset @@Dest-4
6791
            mov edx,offset @@Dest-4
6004
            sub edx,offset @@StartCode
6792
            sub edx,offset @@StartCode
6005
            mov dword ptr [ecx+edx],eax
6793
            mov dword ptr [ecx+edx],eax
6006
          end;
6794
          end;
6007
        end;
6795
        end;
Line 6057... Line 6845...
6057
            add eax,edx
6845
            add eax,edx
6058
            mov byte ptr [offset _null],al{}@@Dest:
6846
            mov byte ptr [offset _null],al{}@@Dest:
6059
          @@EndCode:
6847
          @@EndCode:
6060
            {$I DXRender.inc}
6848
            {$I DXRender.inc}
6061
            {  @@Col1  }
6849
            {  @@Col1  }
6062
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
6850
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
6063
            mov edx,offset @@Col1-4
6851
            mov edx,offset @@Col1-4
6064
            sub edx,offset @@StartCode
6852
            sub edx,offset @@StartCode
6065
            mov dword ptr [ecx+edx],eax
6853
            mov dword ptr [ecx+edx],eax
6066
 
6854
 
6067
            {  @@Col2  }
6855
            {  @@Col2  }
6068
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
6856
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
6069
            mov edx,offset @@Col2-4
6857
            mov edx,offset @@Col2-4
6070
            sub edx,offset @@StartCode
6858
            sub edx,offset @@StartCode
6071
            mov dword ptr [ecx+edx],eax
6859
            mov dword ptr [ecx+edx],eax
6072
 
6860
 
6073
            {  @@Dest  }
6861
            {  @@Dest  }
6074
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
6862
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
6075
            mov edx,offset @@Dest-4
6863
            mov edx,offset @@Dest-4
6076
            sub edx,offset @@StartCode
6864
            sub edx,offset @@StartCode
6077
            mov dword ptr [ecx+edx],eax
6865
            mov dword ptr [ecx+edx],eax
6078
          end;
6866
          end;
6079
        end;
6867
        end;
Line 6091... Line 6879...
6091
            add eax,edx
6879
            add eax,edx
6092
            mov byte ptr [offset _null],al{}@@Dest:
6880
            mov byte ptr [offset _null],al{}@@Dest:
6093
          @@EndCode:
6881
          @@EndCode:
6094
            {$I DXRender.inc}
6882
            {$I DXRender.inc}
6095
            {  @@Col1  }
6883
            {  @@Col1  }
6096
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6884
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
6097
            mov edx,offset @@Col1-4
6885
            mov edx,offset @@Col1-4
6098
            sub edx,offset @@StartCode
6886
            sub edx,offset @@StartCode
6099
            mov dword ptr [ecx+edx],eax
6887
            mov dword ptr [ecx+edx],eax
6100
 
6888
 
6101
            {  @@Col2  }
6889
            {  @@Col2  }
6102
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
6890
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
6103
            mov edx,offset @@Col2-4
6891
            mov edx,offset @@Col2-4
6104
            sub edx,offset @@StartCode
6892
            sub edx,offset @@StartCode
6105
            mov dword ptr [ecx+edx],eax
6893
            mov dword ptr [ecx+edx],eax
6106
 
6894
 
6107
            {  @@Dest  }
6895
            {  @@Dest  }
6108
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
6896
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
6109
            mov edx,offset @@Dest-4
6897
            mov edx,offset @@Dest-4
6110
            sub edx,offset @@StartCode
6898
            sub edx,offset @@StartCode
6111
            mov dword ptr [ecx+edx],eax
6899
            mov dword ptr [ecx+edx],eax
6112
          end;
6900
          end;
6113
        end;
6901
        end;
Line 6124... Line 6912...
6124
        mov ebx,ebp
6912
        mov ebx,ebp
6125
        xor ebx,$FF
6913
        xor ebx,$FF
6126
      @@EndCode:
6914
      @@EndCode:
6127
        {$I DXRender.inc}
6915
        {$I DXRender.inc}
6128
        {  @@Col1A  }
6916
        {  @@Col1A  }
6129
        mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
6917
        mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
6130
        mov edx,offset @@Col1A-4
6918
        mov edx,offset @@Col1A-4
6131
        sub edx,offset @@StartCode
6919
        sub edx,offset @@StartCode
6132
        mov dword ptr [ecx+edx],eax
6920
        mov dword ptr [ecx+edx],eax
6133
      end;
6921
      end;
6134
 
6922
 
Line 6182... Line 6970...
6182
            add eax,edx
6970
            add eax,edx
6183
            mov byte ptr [offset _null],al{}@@Dest:
6971
            mov byte ptr [offset _null],al{}@@Dest:
6184
          @@EndCode:
6972
          @@EndCode:
6185
            {$I DXRender.inc}
6973
            {$I DXRender.inc}
6186
            {  @@Col1  }
6974
            {  @@Col1  }
6187
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
6975
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
6188
            mov edx,offset @@Col1-4
6976
            mov edx,offset @@Col1-4
6189
            sub edx,offset @@StartCode
6977
            sub edx,offset @@StartCode
6190
            mov dword ptr [ecx+edx],eax
6978
            mov dword ptr [ecx+edx],eax
6191
 
6979
 
6192
            {  @@Col2  }
6980
            {  @@Col2  }
6193
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
6981
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
6194
            mov edx,offset @@Col2-4
6982
            mov edx,offset @@Col2-4
6195
            sub edx,offset @@StartCode
6983
            sub edx,offset @@StartCode
6196
            mov dword ptr [ecx+edx],eax
6984
            mov dword ptr [ecx+edx],eax
6197
 
6985
 
6198
            {  @@Dest  }
6986
            {  @@Dest  }
6199
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
6987
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
6200
            mov edx,offset @@Dest-4
6988
            mov edx,offset @@Dest-4
6201
            sub edx,offset @@StartCode
6989
            sub edx,offset @@StartCode
6202
            mov dword ptr [ecx+edx],eax
6990
            mov dword ptr [ecx+edx],eax
6203
          end;
6991
          end;
6204
        end;
6992
        end;
Line 6216... Line 7004...
6216
            add eax,edx
7004
            add eax,edx
6217
            mov byte ptr [offset _null],al{}@@Dest:
7005
            mov byte ptr [offset _null],al{}@@Dest:
6218
          @@EndCode:
7006
          @@EndCode:
6219
            {$I DXRender.inc}
7007
            {$I DXRender.inc}
6220
            {  @@Col1  }
7008
            {  @@Col1  }
6221
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
7009
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
6222
            mov edx,offset @@Col1-4
7010
            mov edx,offset @@Col1-4
6223
            sub edx,offset @@StartCode
7011
            sub edx,offset @@StartCode
6224
            mov dword ptr [ecx+edx],eax
7012
            mov dword ptr [ecx+edx],eax
6225
 
7013
 
6226
            {  @@Col2  }
7014
            {  @@Col2  }
6227
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
7015
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
6228
            mov edx,offset @@Col2-4
7016
            mov edx,offset @@Col2-4
6229
            sub edx,offset @@StartCode
7017
            sub edx,offset @@StartCode
6230
            mov dword ptr [ecx+edx],eax
7018
            mov dword ptr [ecx+edx],eax
6231
 
7019
 
6232
            {  @@Dest  }
7020
            {  @@Dest  }
6233
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
7021
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
6234
            mov edx,offset @@Dest-4
7022
            mov edx,offset @@Dest-4
6235
            sub edx,offset @@StartCode
7023
            sub edx,offset @@StartCode
6236
            mov dword ptr [ecx+edx],eax
7024
            mov dword ptr [ecx+edx],eax
6237
          end;
7025
          end;
6238
        end;
7026
        end;
Line 6288... Line 7076...
6288
            add eax,edx
7076
            add eax,edx
6289
            mov byte ptr [offset _null],al{}@@Dest:
7077
            mov byte ptr [offset _null],al{}@@Dest:
6290
          @@EndCode:
7078
          @@EndCode:
6291
            {$I DXRender.inc}
7079
            {$I DXRender.inc}
6292
            {  @@Col1  }
7080
            {  @@Col1  }
6293
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
7081
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
6294
            mov edx,offset @@Col1-4
7082
            mov edx,offset @@Col1-4
6295
            sub edx,offset @@StartCode
7083
            sub edx,offset @@StartCode
6296
            mov dword ptr [ecx+edx],eax
7084
            mov dword ptr [ecx+edx],eax
6297
 
7085
 
6298
            {  @@Col2  }
7086
            {  @@Col2  }
6299
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
7087
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
6300
            mov edx,offset @@Col2-4
7088
            mov edx,offset @@Col2-4
6301
            sub edx,offset @@StartCode
7089
            sub edx,offset @@StartCode
6302
            mov dword ptr [ecx+edx],eax
7090
            mov dword ptr [ecx+edx],eax
6303
 
7091
 
6304
            {  @@Dest  }
7092
            {  @@Dest  }
6305
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
7093
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
6306
            mov edx,offset @@Dest-4
7094
            mov edx,offset @@Dest-4
6307
            sub edx,offset @@StartCode
7095
            sub edx,offset @@StartCode
6308
            mov dword ptr [ecx+edx],eax
7096
            mov dword ptr [ecx+edx],eax
6309
          end;
7097
          end;
6310
        end;
7098
        end;
Line 6322... Line 7110...
6322
            add eax,edx
7110
            add eax,edx
6323
            mov byte ptr [offset _null],al{}@@Dest:
7111
            mov byte ptr [offset _null],al{}@@Dest:
6324
          @@EndCode:
7112
          @@EndCode:
6325
            {$I DXRender.inc}
7113
            {$I DXRender.inc}
6326
            {  @@Col1  }
7114
            {  @@Col1  }
6327
            mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
7115
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
6328
            mov edx,offset @@Col1-4
7116
            mov edx,offset @@Col1-4
6329
            sub edx,offset @@StartCode
7117
            sub edx,offset @@StartCode
6330
            mov dword ptr [ecx+edx],eax
7118
            mov dword ptr [ecx+edx],eax
6331
 
7119
 
6332
            {  @@Col2  }
7120
            {  @@Col2  }
6333
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
7121
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
6334
            mov edx,offset @@Col2-4
7122
            mov edx,offset @@Col2-4
6335
            sub edx,offset @@StartCode
7123
            sub edx,offset @@StartCode
6336
            mov dword ptr [ecx+edx],eax
7124
            mov dword ptr [ecx+edx],eax
6337
 
7125
 
6338
            {  @@Dest  }
7126
            {  @@Dest  }
6339
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
7127
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
6340
            mov edx,offset @@Dest-4
7128
            mov edx,offset @@Dest-4
6341
            sub edx,offset @@StartCode
7129
            sub edx,offset @@StartCode
6342
            mov dword ptr [ecx+edx],eax
7130
            mov dword ptr [ecx+edx],eax
6343
          end;
7131
          end;
6344
        end;
7132
        end;
Line 6420... Line 7208...
6420
          mov al,byte ptr [offset _null]{}@@Col2:
7208
          mov al,byte ptr [offset _null]{}@@Col2:
6421
          mov byte ptr [offset _null],al{}@@Dest:
7209
          mov byte ptr [offset _null],al{}@@Dest:
6422
        @@EndCode:
7210
        @@EndCode:
6423
          {$I DXRender.inc}
7211
          {$I DXRender.inc}
6424
          {  @@Col2  }
7212
          {  @@Col2  }
6425
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
7213
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
6426
          mov edx,offset @@Col2-4
7214
          mov edx,offset @@Col2-4
6427
          sub edx,offset @@StartCode
7215
          sub edx,offset @@StartCode
6428
          mov dword ptr [ecx+edx],eax
7216
          mov dword ptr [ecx+edx],eax
6429
 
7217
 
6430
          {  @@Dest  }
7218
          {  @@Dest  }
6431
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
7219
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
6432
          mov edx,offset @@Dest-4
7220
          mov edx,offset @@Dest-4
6433
          sub edx,offset @@StartCode
7221
          sub edx,offset @@StartCode
6434
          mov dword ptr [ecx+edx],eax
7222
          mov dword ptr [ecx+edx],eax
6435
        end;
7223
        end;
6436
      end;
7224
      end;
6437
    end;
7225
    end;
6438
 
7226
 
6439
    procedure genBlend_MODULATE_RGBONLY(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
7227
    procedure genBlend_MODULATE(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
6440
      ConstChannels1, ConstChannels12: TDXRColorChannels);
7228
      ConstChannels1, ConstChannels12: TDXRColorChannels);
6441
    begin
7229
    begin
6442
      if chRed in EnableChannels then
7230
      if chRed in EnableChannels then
6443
      begin
7231
      begin
6444
        asm
7232
        asm
Line 6448... Line 7236...
6448
          mul byte ptr [offset offset _null]   {}@@Col2:
7236
          mul byte ptr [offset offset _null]   {}@@Col2:
6449
          mov byte ptr [offset offset _null],ah{}@@Dest:
7237
          mov byte ptr [offset offset _null],ah{}@@Dest:
6450
        @@EndCode:
7238
        @@EndCode:
6451
          {$I DXRender.inc}
7239
          {$I DXRender.inc}
6452
          {  @@Col1  }
7240
          {  @@Col1  }
6453
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.R+1)
7241
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
6454
          mov edx,offset @@Col1-4
7242
          mov edx,offset @@Col1-4
6455
          sub edx,offset @@StartCode
7243
          sub edx,offset @@StartCode
6456
          mov dword ptr [ecx+edx],eax
7244
          mov dword ptr [ecx+edx],eax
6457
 
7245
 
6458
          {  @@Col2  }
7246
          {  @@Col2  }
6459
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.R+1)
7247
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
6460
          mov edx,offset @@Col2-4
7248
          mov edx,offset @@Col2-4
6461
          sub edx,offset @@StartCode
7249
          sub edx,offset @@StartCode
6462
          mov dword ptr [ecx+edx],eax
7250
          mov dword ptr [ecx+edx],eax
6463
 
7251
 
6464
          {  @@Dest  }
7252
          {  @@Dest  }
6465
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.R+1)
7253
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
6466
          mov edx,offset @@Dest-4
7254
          mov edx,offset @@Dest-4
6467
          sub edx,offset @@StartCode
7255
          sub edx,offset @@StartCode
6468
          mov dword ptr [ecx+edx],eax
7256
          mov dword ptr [ecx+edx],eax
6469
        end;
7257
        end;
6470
      end;
7258
      end;
Line 6478... Line 7266...
6478
          mul byte ptr [offset offset _null]   {}@@Col2:
7266
          mul byte ptr [offset offset _null]   {}@@Col2:
6479
          mov byte ptr [offset offset _null],ah{}@@Dest:
7267
          mov byte ptr [offset offset _null],ah{}@@Dest:
6480
        @@EndCode:
7268
        @@EndCode:
6481
          {$I DXRender.inc}
7269
          {$I DXRender.inc}
6482
          {  @@Col1  }
7270
          {  @@Col1  }
6483
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.G+1)
7271
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
6484
          mov edx,offset @@Col1-4
7272
          mov edx,offset @@Col1-4
6485
          sub edx,offset @@StartCode
7273
          sub edx,offset @@StartCode
6486
          mov dword ptr [ecx+edx],eax
7274
          mov dword ptr [ecx+edx],eax
6487
 
7275
 
6488
          {  @@Col2  }
7276
          {  @@Col2  }
6489
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.G+1)
7277
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
6490
          mov edx,offset @@Col2-4
7278
          mov edx,offset @@Col2-4
6491
          sub edx,offset @@StartCode
7279
          sub edx,offset @@StartCode
6492
          mov dword ptr [ecx+edx],eax
7280
          mov dword ptr [ecx+edx],eax
6493
 
7281
 
6494
          {  @@Dest  }
7282
          {  @@Dest  }
6495
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.G+1)
7283
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
6496
          mov edx,offset @@Dest-4
7284
          mov edx,offset @@Dest-4
6497
          sub edx,offset @@StartCode
7285
          sub edx,offset @@StartCode
6498
          mov dword ptr [ecx+edx],eax
7286
          mov dword ptr [ecx+edx],eax
6499
        end;
7287
        end;
6500
      end;
7288
      end;
Line 6508... Line 7296...
6508
          mul byte ptr [offset offset _null]   {}@@Col2:
7296
          mul byte ptr [offset offset _null]   {}@@Col2:
6509
          mov byte ptr [offset offset _null],ah{}@@Dest:
7297
          mov byte ptr [offset offset _null],ah{}@@Dest:
6510
        @@EndCode:
7298
        @@EndCode:
6511
          {$I DXRender.inc}
7299
          {$I DXRender.inc}
6512
          {  @@Col1  }
7300
          {  @@Col1  }
6513
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.B+1)
7301
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
6514
          mov edx,offset @@Col1-4
7302
          mov edx,offset @@Col1-4
6515
          sub edx,offset @@StartCode
7303
          sub edx,offset @@StartCode
6516
          mov dword ptr [ecx+edx],eax
7304
          mov dword ptr [ecx+edx],eax
6517
 
7305
 
6518
          {  @@Col2  }
7306
          {  @@Col2  }
6519
          mov eax,Col2; add eax,BYTE(TDXRMachine_Color.B+1)
7307
          mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
6520
          mov edx,offset @@Col2-4
7308
          mov edx,offset @@Col2-4
6521
          sub edx,offset @@StartCode
7309
          sub edx,offset @@StartCode
6522
          mov dword ptr [ecx+edx],eax
7310
          mov dword ptr [ecx+edx],eax
6523
 
7311
 
6524
          {  @@Dest  }
7312
          {  @@Dest  }
6525
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.B+1)
7313
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
6526
          mov edx,offset @@Dest-4
7314
          mov edx,offset @@Dest-4
6527
          sub edx,offset @@StartCode
7315
          sub edx,offset @@StartCode
6528
          mov dword ptr [ecx+edx],eax
7316
          mov dword ptr [ecx+edx],eax
6529
        end;
7317
        end;
6530
      end;
7318
      end;
Line 6537... Line 7325...
6537
          mov al,byte ptr [offset _null]{}@@Col1:
7325
          mov al,byte ptr [offset _null]{}@@Col1:
6538
          mov byte ptr [offset _null],al{}@@Dest:
7326
          mov byte ptr [offset _null],al{}@@Dest:
6539
        @@EndCode:
7327
        @@EndCode:
6540
          {$I DXRender.inc}
7328
          {$I DXRender.inc}
6541
          {  @@Col1  }
7329
          {  @@Col1  }
6542
          mov eax,Col1; add eax,BYTE(TDXRMachine_Color.A+1)
7330
          mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
-
 
7331
          mov edx,offset @@Col1-4
-
 
7332
          sub edx,offset @@StartCode
-
 
7333
          mov dword ptr [ecx+edx],eax
-
 
7334
 
-
 
7335
          {  @@Dest  }
-
 
7336
          mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
-
 
7337
          mov edx,offset @@Dest-4
-
 
7338
          sub edx,offset @@StartCode
-
 
7339
          mov dword ptr [ecx+edx],eax
-
 
7340
        end;
-
 
7341
      end;
-
 
7342
    end;
-
 
7343
 
-
 
7344
    procedure genBlend_MODULATEALPHA(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
-
 
7345
      ConstChannels1, ConstChannels12: TDXRColorChannels);
-
 
7346
    begin
-
 
7347
      if UseMMX then
-
 
7348
      begin
-
 
7349
        FMMXUsed := True;
-
 
7350
        asm
-
 
7351
          jmp @@EndCode
-
 
7352
        @@StartCode:
-
 
7353
          db $0F,$6F,$05,$11,$11,$11,$11///movq mm0,qword ptr [$11111111]
-
 
7354
                                 @@Col1:
-
 
7355
          db $0F,$6F,$0D,$11,$11,$11,$11///movq mm1,qword ptr [$11111111]
-
 
7356
                                 @@Col2:
-
 
7357
          db $0F,$E5,$C1      ///pmulhw mm0,mm1
-
 
7358
          db $0F,$7F,$05,$11,$11,$11,$11///movq qword ptr [$11111111],mm0
-
 
7359
                                 @@Dest:
-
 
7360
        @@EndCode:
-
 
7361
          {$I DXRender.inc}
-
 
7362
          {  @@Col1  }
-
 
7363
          mov eax,Col1
-
 
7364
          mov edx,offset @@Col1-4
-
 
7365
          sub edx,offset @@StartCode
-
 
7366
          mov dword ptr [ecx+edx],eax
-
 
7367
 
-
 
7368
          {  @@Col2  }
-
 
7369
          mov eax,Col2
-
 
7370
          mov edx,offset @@Col2-4
-
 
7371
          sub edx,offset @@StartCode
-
 
7372
          mov dword ptr [ecx+edx],eax
-
 
7373
 
-
 
7374
          {  @@Dest  }
-
 
7375
          mov eax,offset Dest
-
 
7376
          mov edx,offset @@Dest-4
-
 
7377
          sub edx,offset @@StartCode
-
 
7378
          mov dword ptr [ecx+edx],eax
-
 
7379
        end;
-
 
7380
      end else
-
 
7381
      begin
-
 
7382
        if chRed in EnableChannels then
-
 
7383
        begin
-
 
7384
          asm
-
 
7385
            jmp @@EndCode
-
 
7386
          @@StartCode:
-
 
7387
            mov al,byte ptr [offset offset _null]{}@@Col1:
-
 
7388
            mul byte ptr [offset offset _null]   {}@@Col2:
-
 
7389
            mov byte ptr [offset offset _null],ah{}@@Dest:
-
 
7390
          @@EndCode:
-
 
7391
            {$I DXRender.inc}
-
 
7392
            {  @@Col1  }
-
 
7393
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.R+1)
-
 
7394
            mov edx,offset @@Col1-4
-
 
7395
            sub edx,offset @@StartCode
-
 
7396
            mov dword ptr [ecx+edx],eax
-
 
7397
 
-
 
7398
            {  @@Col2  }
-
 
7399
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.R+1)
-
 
7400
            mov edx,offset @@Col2-4
-
 
7401
            sub edx,offset @@StartCode
-
 
7402
            mov dword ptr [ecx+edx],eax
-
 
7403
 
-
 
7404
            {  @@Dest  }
-
 
7405
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.R+1)
-
 
7406
            mov edx,offset @@Dest-4
-
 
7407
            sub edx,offset @@StartCode
-
 
7408
            mov dword ptr [ecx+edx],eax
-
 
7409
          end;
-
 
7410
        end;
-
 
7411
 
-
 
7412
        if chGreen in EnableChannels then
-
 
7413
        begin
-
 
7414
          asm
-
 
7415
            jmp @@EndCode
-
 
7416
          @@StartCode:
-
 
7417
            mov al,byte ptr [offset offset _null]{}@@Col1:
-
 
7418
            mul byte ptr [offset offset _null]   {}@@Col2:
-
 
7419
            mov byte ptr [offset offset _null],ah{}@@Dest:
-
 
7420
          @@EndCode:
-
 
7421
            {$I DXRender.inc}
-
 
7422
            {  @@Col1  }
-
 
7423
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.G+1)
-
 
7424
            mov edx,offset @@Col1-4
-
 
7425
            sub edx,offset @@StartCode
-
 
7426
            mov dword ptr [ecx+edx],eax
-
 
7427
 
-
 
7428
            {  @@Col2  }
-
 
7429
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.G+1)
-
 
7430
            mov edx,offset @@Col2-4
-
 
7431
            sub edx,offset @@StartCode
-
 
7432
            mov dword ptr [ecx+edx],eax
-
 
7433
 
-
 
7434
            {  @@Dest  }
-
 
7435
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.G+1)
-
 
7436
            mov edx,offset @@Dest-4
-
 
7437
            sub edx,offset @@StartCode
-
 
7438
            mov dword ptr [ecx+edx],eax
-
 
7439
          end;
-
 
7440
        end;
-
 
7441
 
-
 
7442
        if chBlue in EnableChannels then
-
 
7443
        begin
-
 
7444
          asm
-
 
7445
            jmp @@EndCode
-
 
7446
          @@StartCode:
-
 
7447
            mov al,byte ptr [offset offset _null]{}@@Col1:
-
 
7448
            mul byte ptr [offset offset _null]   {}@@Col2:
-
 
7449
            mov byte ptr [offset offset _null],ah{}@@Dest:
-
 
7450
          @@EndCode:
-
 
7451
            {$I DXRender.inc}
-
 
7452
            {  @@Col1  }
-
 
7453
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.B+1)
6543
          mov edx,offset @@Col1-4
7454
            mov edx,offset @@Col1-4
6544
          sub edx,offset @@StartCode
7455
            sub edx,offset @@StartCode
6545
          mov dword ptr [ecx+edx],eax
7456
            mov dword ptr [ecx+edx],eax
6546
 
7457
 
-
 
7458
            {  @@Col2  }
-
 
7459
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.B+1)
-
 
7460
            mov edx,offset @@Col2-4
-
 
7461
            sub edx,offset @@StartCode
-
 
7462
            mov dword ptr [ecx+edx],eax
-
 
7463
 
6547
          {  @@Dest  }
7464
            {  @@Dest  }
6548
          mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
7465
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.B+1)
6549
          mov edx,offset @@Dest-4
7466
            mov edx,offset @@Dest-4
6550
          sub edx,offset @@StartCode
7467
            sub edx,offset @@StartCode
6551
          mov dword ptr [ecx+edx],eax
7468
            mov dword ptr [ecx+edx],eax
6552
        end;
7469
          end;
6553
      end;
7470
        end;
-
 
7471
 
-
 
7472
        if chAlpha in EnableChannels then
-
 
7473
        begin
-
 
7474
          asm
-
 
7475
            jmp @@EndCode
-
 
7476
          @@StartCode:
-
 
7477
            mov al,byte ptr [offset offset _null]{}@@Col1:
-
 
7478
            mul byte ptr [offset offset _null]   {}@@Col2:
-
 
7479
            mov byte ptr [offset offset _null],ah{}@@Dest:
-
 
7480
          @@EndCode:
-
 
7481
            {$I DXRender.inc}
-
 
7482
            {  @@Col1  }
-
 
7483
            mov eax,Col1; add eax,Byte(TDXRMachine_Color.A+1)
-
 
7484
            mov edx,offset @@Col1-4
-
 
7485
            sub edx,offset @@StartCode
-
 
7486
            mov dword ptr [ecx+edx],eax
-
 
7487
 
-
 
7488
            {  @@Col2  }
-
 
7489
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
-
 
7490
            mov edx,offset @@Col2-4
-
 
7491
            sub edx,offset @@StartCode
-
 
7492
            mov dword ptr [ecx+edx],eax
-
 
7493
 
-
 
7494
            {  @@Dest  }
-
 
7495
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
-
 
7496
            mov edx,offset @@Dest-4
-
 
7497
            sub edx,offset @@StartCode
-
 
7498
            mov dword ptr [ecx+edx],eax
-
 
7499
          end;
-
 
7500
        end;
-
 
7501
      end;
6554
    end;
7502
    end;
6555
 
7503
 
6556
    procedure genBlend_ADD(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
7504
    procedure genBlend_ADD(var Code: Pointer; Dest, Col1, Col2: PDXRMachine_Color;
6557
      ConstChannels1, ConstChannels12: TDXRColorChannels);
7505
      ConstChannels1, ConstChannels12: TDXRColorChannels);
6558
    begin
7506
    begin
Line 6599... Line 7547...
6599
            mov al,byte ptr [offset _null]{}@@Col2:
7547
            mov al,byte ptr [offset _null]{}@@Col2:
6600
            mov byte ptr [offset _null],al{}@@Dest:
7548
            mov byte ptr [offset _null],al{}@@Dest:
6601
          @@EndCode:
7549
          @@EndCode:
6602
            {$I DXRender.inc}
7550
            {$I DXRender.inc}
6603
            {  @@Col2  }
7551
            {  @@Col2  }
6604
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
7552
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
6605
            mov edx,offset @@Col2-4
7553
            mov edx,offset @@Col2-4
6606
            sub edx,offset @@StartCode
7554
            sub edx,offset @@StartCode
6607
            mov dword ptr [ecx+edx],eax
7555
            mov dword ptr [ecx+edx],eax
6608
 
7556
 
6609
            {  @@Dest  }
7557
            {  @@Dest  }
6610
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
7558
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
6611
            mov edx,offset @@Dest-4
7559
            mov edx,offset @@Dest-4
6612
            sub edx,offset @@StartCode
7560
            sub edx,offset @@StartCode
6613
            mov dword ptr [ecx+edx],eax
7561
            mov dword ptr [ecx+edx],eax
6614
          end;
7562
          end;
6615
        end;
7563
        end;
Line 6666... Line 7614...
6666
            mov al,byte ptr [offset _null]{}@@Col2:
7614
            mov al,byte ptr [offset _null]{}@@Col2:
6667
            mov byte ptr [offset _null],al{}@@Dest:
7615
            mov byte ptr [offset _null],al{}@@Dest:
6668
          @@EndCode:
7616
          @@EndCode:
6669
            {$I DXRender.inc}
7617
            {$I DXRender.inc}
6670
            {  @@Col2  }
7618
            {  @@Col2  }
6671
            mov eax,Col2; add eax,BYTE(TDXRMachine_Color.A+1)
7619
            mov eax,Col2; add eax,Byte(TDXRMachine_Color.A+1)
6672
            mov edx,offset @@Col2-4
7620
            mov edx,offset @@Col2-4
6673
            sub edx,offset @@StartCode
7621
            sub edx,offset @@StartCode
6674
            mov dword ptr [ecx+edx],eax
7622
            mov dword ptr [ecx+edx],eax
6675
 
7623
 
6676
            {  @@Dest  }
7624
            {  @@Dest  }
6677
            mov eax,Dest; add eax,BYTE(TDXRMachine_Color.A+1)
7625
            mov eax,Dest; add eax,Byte(TDXRMachine_Color.A+1)
6678
            mov edx,offset @@Dest-4
7626
            mov edx,offset @@Dest-4
6679
            sub edx,offset @@StartCode
7627
            sub edx,offset @@StartCode
6680
            mov dword ptr [ecx+edx],eax
7628
            mov dword ptr [ecx+edx],eax
6681
          end;
7629
          end;
6682
        end;
7630
        end;
Line 6690... Line 7638...
6690
      DXR_BLEND_ZERO                      : genBlend_ZERO(Code, Dest);
7638
      DXR_BLEND_ZERO                      : genBlend_ZERO(Code, Dest);
6691
      DXR_BLEND_ONE1                      : genBlend_ONE1(Code, Dest, Col1, ConstChannels1);
7639
      DXR_BLEND_ONE1                      : genBlend_ONE1(Code, Dest, Col1, ConstChannels1);
6692
      DXR_BLEND_ONE2                      : genBlend_ONE1(Code, Dest, Col2, ConstChannels2);
7640
      DXR_BLEND_ONE2                      : genBlend_ONE1(Code, Dest, Col2, ConstChannels2);
6693
      DXR_BLEND_ONE1_ADD_ONE2             : genBlend_ONE1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7641
      DXR_BLEND_ONE1_ADD_ONE2             : genBlend_ONE1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6694
      DXR_BLEND_ONE1_SUB_ONE2             : genBlend_ONE1_SUB_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7642
      DXR_BLEND_ONE1_SUB_ONE2             : genBlend_ONE1_SUB_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6695
      DXR_BLEND_ONE2_SUB_ONE1             : genBlend_ONE1_SUB_ONE2(Code, Dest, Col2, Col1, ConstChannels2, ConstChannels1);
7643
      DXR_BLEND_ONE2_SUB_ONE1             : genBlend_ONE2_SUB_ONE1(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6696
      DXR_BLEND_ONE1_MUL_ONE2             : genBlend_ONE1_MUL_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7644
      DXR_BLEND_ONE1_MUL_ONE2             : genBlend_ONE1_MUL_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6697
      DXR_BLEND_SRCALPHA1                 : genBlend_SRCALPHA1(Code, Dest, Col1, ConstChannels1);
7645
      DXR_BLEND_SRCALPHA1                 : genBlend_SRCALPHA1(Code, Dest, Col1, ConstChannels1);
6698
      DXR_BLEND_SRCALPHA1_ADD_ONE2        : genBlend_SRCALPHA1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7646
      DXR_BLEND_SRCALPHA1_ADD_ONE2        : genBlend_SRCALPHA1_ADD_ONE2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6699
      DXR_BLEND_ONE2_SUB_SRCALPHA1        : genBlend_ONE2_SUB_SRCALPHA1(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7647
      DXR_BLEND_ONE2_SUB_SRCALPHA1        : genBlend_ONE2_SUB_SRCALPHA1(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6700
      DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2: genBlend_SRCALPHA1_ADD_INVSRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7648
      DXR_BLEND_SRCALPHA1_ADD_INVSRCALPHA2: genBlend_SRCALPHA1_ADD_INVSRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6701
      DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2: genBlend_INVSRCALPHA1_ADD_SRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7649
      DXR_BLEND_INVSRCALPHA1_ADD_SRCALPHA2: genBlend_INVSRCALPHA1_ADD_SRCALPHA2(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
-
 
7650
      DXR_BLEND_DECAL                     : genBlend_ONE1(Code, Dest, Col1, ConstChannels1);
6702
      DXR_BLEND_DECALALPHA                : genBlend_DECALALPHA(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7651
      DXR_BLEND_DECALALPHA                : genBlend_DECALALPHA(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6703
      DXR_BLEND_MODULATE                  : genBlend_MODULATE_RGBONLY(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7652
      DXR_BLEND_MODULATE                  : genBlend_MODULATE(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
-
 
7653
      DXR_BLEND_MODULATEALPHA             : genBlend_MODULATEALPHA(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6704
      DXR_BLEND_ADD                       : genBlend_ADD(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
7654
      DXR_BLEND_ADD                       : genBlend_ADD(Code, Dest, Col1, Col2, ConstChannels1, ConstChannels2);
6705
    end;
7655
    end;                                                                                                      
6706
  end;
7656
  end;
6707
 
7657
 
6708
var
7658
var
Line 6736... Line 7686...
6736
          end;
7686
          end;
6737
      DXR_TREETYPE_LOADTEXTURE:
7687
      DXR_TREETYPE_LOADTEXTURE:
6738
          begin
7688
          begin
6739
            genReadTexture(Code, Result, TextureList[Tree.Texture], Tree.Channels);
7689
            genReadTexture(Code, Result, TextureList[Tree.Texture], Tree.Channels);
6740
          end;
7690
          end;
-
 
7691
      DXR_TREETYPE_LOADBUMPTEXTURE:
-
 
7692
          begin
-
 
7693
            genReadBumpTexture(Code, Result, TextureList[Tree.Texture], TextureList[Tree.BumpTexture], Tree.Channels);
-
 
7694
          end;
6741
      DXR_TREETYPE_LOADDESTPIXEL:
7695
      DXR_TREETYPE_LOADDESTPIXEL:
6742
          begin
7696
          begin
6743
            genReadDestPixel(Code);
7697
            genReadDestPixel(Code);
6744
            genDecodeColor(Code, Dest^, Result, Tree.Channels, _BlackColor);
7698
            genDecodeColor(Code, Dest^, Result, Tree.Channels, _BlackColor);
6745
          end;
7699
          end;
Line 6881... Line 7835...
6881
var
7835
var
6882
  ExitAddress, MainCode: Pointer;
7836
  ExitAddress, MainCode: Pointer;
6883
  Col: PDXRMachine_Color;
7837
  Col: PDXRMachine_Color;
6884
begin
7838
begin
6885
  if (Tree.Typ=DXR_TREETYPE_LOADCOLOR) and (not ColorList[Tree.Color].Gouraud) and
7839
  if (Tree.Typ=DXR_TREETYPE_LOADCOLOR) and (not ColorList[Tree.Color].Gouraud) and
6886
    (not Dither.Enable) and (Dest.BitCount in [16, 32]) then
7840
    (not ZBuffer.Enable) and (not Dither.Enable) and (Dest.BitCount in [16, 32]) then
6887
  begin
7841
  begin
6888
    FCall := Code;
7842
    FCall := Code;
6889
    genInitDestAddress(Code);
7843
    genInitDestAddress(Code);
6890
    genEncodeColor(Code, Dest^, @ColorList[Tree.Color].nColor, Tree.Channels);
7844
    genEncodeColor(Code, Dest^, @ColorList[Tree.Color].nColor, Tree.Channels);
6891
 
7845
 
Line 6970... Line 7924...
6970
  SkipAddress := Code;
7924
  SkipAddress := Code;
6971
 
7925
 
6972
  genUpdateAxis(Code);
7926
  genUpdateAxis(Code);
6973
  genUpdateColor(Code);
7927
  genUpdateColor(Code);
6974
  genUpdateTextureAxis(Code);
7928
  genUpdateTextureAxis(Code);
-
 
7929
  genUpdateRHW(Code);
6975
  genUpdateDestAddress(Code);
7930
  genUpdateDestAddress(Code);
-
 
7931
  genUpdateZBufferAddress(Code);
6976
 
7932
 
6977
  asm
7933
  asm
6978
    jmp @@EndCode
7934
    jmp @@EndCode
6979
  @@StartCode:
7935
  @@StartCode:
6980
    dec ecx
7936
    dec ecx
Line 6984... Line 7940...
6984
  genCmpFunc(Code, DXR_CMPFUNC_LESSEQUAL, ExitAddress);
7940
  genCmpFunc(Code, DXR_CMPFUNC_LESSEQUAL, ExitAddress);
6985
 
7941
 
6986
  {  -----------  Main  -----------  }
7942
  {  -----------  Main  -----------  }
6987
  MainCode := Code;
7943
  MainCode := Code;
6988
 
7944
 
-
 
7945
  genZBufferTest(Code);
-
 
7946
 
6989
  if Tree.Typ=DXR_TREETYPE_LOADCOLOR then
7947
  if Tree.Typ=DXR_TREETYPE_LOADCOLOR then
6990
  begin
7948
  begin
6991
    genEncodeColor2(Code, Dest^, @ColorList[Tree.Color].nColor, Tree.Channels);
7949
    genEncodeColor2(Code, Dest^, @ColorList[Tree.Color].nColor, Tree.Channels);
6992
    genWriteDestPixel(Code);
7950
    genWriteDestPixel(Code);
6993
  end else
7951
  end else
6994
  if (Tree.Typ=DXR_TREETYPE_LOADTEXTURE) and (not Dither.Enable) and
7952
  if (Tree.Typ=DXR_TREETYPE_LOADTEXTURE) and (not Dither.Enable) and
6995
    (TextureList[Tree.Texture].Filter in [DXR_TEXTUREFILTER_NEAREST]) and
7953
    (TextureList[Tree.Texture].Filter in [DXR_TEXTUREFILTER_NEAREST, DXR_TEXTUREFILTER_MIPMAP_NEAREST]) and
6996
    (dxrCompareSurface(Dest^, TextureList[Tree.Texture].Surface^)) then
7954
    (dxrCompareSurface(Dest^, TextureList[Tree.Texture].Surface^)) then
6997
  begin
7955
  begin
6998
    genReadSurfacePixel(Code, TextureList[Tree.Texture], @TextureList[Tree.Texture].nAxis);
7956
    genReadSurfacePixel(Code, TextureList[Tree.Texture], @TextureList[Tree.Texture].nAxis);
6999
    genColorKey(Code, TextureList[Tree.Texture]);
7957
    genColorKey(Code, TextureList[Tree.Texture]);
7000
    genWriteDestPixel(Code);
7958
    genWriteDestPixel(Code);
Line 7009... Line 7967...
7009
 
7967
 
7010
  {  -----------  Initialize  -----------  }
7968
  {  -----------  Initialize  -----------  }
7011
  FCall := Code;
7969
  FCall := Code;
7012
 
7970
 
7013
  genInitDestAddress(Code);
7971
  genInitDestAddress(Code);
-
 
7972
  genInitZBuffer(Code);
7014
 
7973
 
7015
  genCmpFunc(Code, DXR_CMPFUNC_ALWAYS, MainCode);
7974
  genCmpFunc(Code, DXR_CMPFUNC_ALWAYS, MainCode);
7016
end;
7975
end;
7017
 
7976
 
7018
procedure TDXRMachine.Run(Count: Integer);
7977
procedure TDXRMachine.Run(Count: Integer);
Line 7073... Line 8032...
7073
    CullMode := DXR_CULL_CCW;
8032
    CullMode := DXR_CULL_CCW;
7074
    Shade := DXR_SHADEMODE_GOURAUD;
8033
    Shade := DXR_SHADEMODE_GOURAUD;
7075
    TexBlend := DXR_BLEND_MODULATE;
8034
    TexBlend := DXR_BLEND_MODULATE;
7076
    Blend := DXR_BLEND_ONE1;
8035
    Blend := DXR_BLEND_ONE1;
7077
    TextureFilter := DXR_TEXTUREFILTER_NEAREST;
8036
    TextureFilter := DXR_TEXTUREFILTER_NEAREST;
-
 
8037
    ZBuffer := nil;
-
 
8038
    ZFunc := DXR_CMPFUNC_LESSEQUAL;
-
 
8039
    ZWriteEnable := True;
7078
    EnableDrawLine := $FFFFFFFF;
8040
    EnableDrawLine := 0;
7079
  end;                
8041
  end;
7080
 
8042
 
7081
  for i:=0 to DXR_MAXTEXTURE-1 do
8043
  for i:=0 to DXR_MAXTEXTURE-1 do
7082
    with States.TextureList[i] do
8044
    with States.TextureList[i] do
7083
    begin
8045
    begin
Line 7085... Line 8047...
7085
      Blend := DXR_BLEND_ONE1;
8047
      Blend := DXR_BLEND_ONE1;
7086
      Surface := nil;
8048
      Surface := nil;
7087
      ColorKeyEnable := False;
8049
      ColorKeyEnable := False;
7088
      ColorKey := 0;
8050
      ColorKey := 0;
7089
      TextureAddress := DXR_TEXTUREADDRESS_TILE;
8051
      TextureAddress := DXR_TEXTUREADDRESS_TILE;
-
 
8052
      BumpTexture := -1;
7090
    end;
8053
    end;
7091
end;
8054
end;
7092
 
8055
 
7093
{  Draw primitive  }
8056
{  Draw primitive  }
7094
 
8057
 
Line 7106... Line 8069...
7106
 
8069
 
7107
procedure dxrDrawTriangle(const Dest: TDXR_Surface; const States: TDXR_RenderStates; const Tri: TDXR_Triangle);
8070
procedure dxrDrawTriangle(const Dest: TDXR_Surface; const States: TDXR_RenderStates; const Tri: TDXR_Triangle);
7108
 
8071
 
7109
  function InitGenerator_MakeTree_LoadTexture(Texture: Integer): PDXRMachine_Tree;
8072
  function InitGenerator_MakeTree_LoadTexture(Texture: Integer): PDXRMachine_Tree;
7110
  begin
8073
  begin
-
 
8074
    if States.TextureList[Texture].BumpTexture>=0 then
-
 
8075
      Result := DXRMachine.CreateTree_LoadBumpTexture(Texture, States.TextureList[Texture].BumpTexture)
-
 
8076
    else
7111
    Result := DXRMachine.CreateTree_LoadTexture(Texture);
8077
      Result := DXRMachine.CreateTree_LoadTexture(Texture);
7112
  end;
8078
  end;
7113
 
8079
 
7114
  function InitGenerator_MakeTree: PDXRMachine_Tree;
8080
  function InitGenerator_MakeTree: PDXRMachine_Tree;
7115
  var
8081
  var
Line 7166... Line 8132...
7166
    end;
8132
    end;
7167
 
8133
 
7168
  var
8134
  var
7169
    i: Integer;
8135
    i: Integer;
7170
    Layer: PDXR_TextureLayer;
8136
    Layer: PDXR_TextureLayer;
-
 
8137
    Mipmap1, Mipmap2, Mipmap3: Integer;
-
 
8138
    TmpSurface2: PDXR_Surface;
7171
  begin
8139
  begin
7172
    DXRMachine.Initialize;
8140
    DXRMachine.Initialize;
7173
 
8141
 
7174
    {  Parameter setting  }
8142
    {  Parameter setting  }
7175
    DXRMachine.Dest := @Dest;
8143
    DXRMachine.Dest := @Dest;
-
 
8144
    DXRMachine.ZBuffer.Enable := States.ZBuffer<>nil;
-
 
8145
    DXRMachine.ZBuffer.Surface := States.ZBuffer;
-
 
8146
    DXRMachine.ZBuffer.CmpFunc := States.ZFunc;
-
 
8147
    DXRMachine.ZBuffer.WriteEnable := States.ZWriteEnable;
7176
    DXRMachine.Dither.Enable := States.DitherEnable;
8148
    DXRMachine.Dither.Enable := States.DitherEnable;
7177
 
8149
 
7178
    DXRMachine.ColorList[0].Gouraud := States.Shade=DXR_SHADEMODE_GOURAUD;
8150
    DXRMachine.ColorList[0].Gouraud := States.Shade=DXR_SHADEMODE_GOURAUD;
7179
    DXRMachine.ColorList[1].Gouraud := States.Shade=DXR_SHADEMODE_GOURAUD;
8151
    DXRMachine.ColorList[1].Gouraud := States.Shade=DXR_SHADEMODE_GOURAUD;
7180
 
8152
 
Line 7190... Line 8162...
7190
            ColorKeyEnable := Layer.ColorKeyEnable;
8162
            ColorKeyEnable := Layer.ColorKeyEnable;
7191
            ColorKey := Layer.ColorKey;
8163
            ColorKey := Layer.ColorKey;
7192
            Surface := Layer.Surface;
8164
            Surface := Layer.Surface;
7193
            Filter := States.TextureFilter;
8165
            Filter := States.TextureFilter;
7194
            TextureAddress := Layer.TextureAddress;
8166
            TextureAddress := Layer.TextureAddress;
-
 
8167
 
-
 
8168
            if (Filter in [DXR_TEXTUREFILTER_MIPMAP_NEAREST, DXR_TEXTUREFILTER_MIPMAP_LINEAR]) and
-
 
8169
              (Surface.MipmapChain<>nil) then
-
 
8170
            begin
-
 
8171
              {  Mipmap  }
-
 
8172
              Mipmap1 := MaxInt;
-
 
8173
              Mipmap3 := Trunc(Abs(Hypot(Tri[2].sx-Tri[1].sx, Tri[2].sy-Tri[1].sy))*
-
 
8174
                Abs(Hypot(Tri[1].sx-Tri[0].sx, Tri[1].sy-Tri[0].sy))*
-
 
8175
                Abs(Hypot(Tri[2].sx-Tri[0].sx, Tri[2].sy-Tri[0].sy))/9);
-
 
8176
 
-
 
8177
              TmpSurface2 := Surface;
-
 
8178
 
-
 
8179
              while TmpSurface2<>nil do
-
 
8180
              begin
-
 
8181
                Mipmap2 := TmpSurface2.Width2*TmpSurface2.Height2;
-
 
8182
 
-
 
8183
                if (Abs(Mipmap3-Mipmap2)<Abs(Mipmap3-Mipmap1)) then
-
 
8184
                begin
-
 
8185
                  Surface := TmpSurface2;
-
 
8186
                  Mipmap1 := Mipmap2;
-
 
8187
                end;
-
 
8188
 
-
 
8189
                TmpSurface2 := TmpSurface2.MipmapChain;
-
 
8190
              end;
-
 
8191
            end;
7195
          end;
8192
          end;
7196
        end;
8193
        end;
7197
      end;
8194
      end;
7198
 
8195
 
7199
    {  Tree making  }
8196
    {  Tree making  }
Line 7233... Line 8230...
7233
  function FloatToTextureFloatY(i: Integer; d: Double): DWORD;
8230
  function FloatToTextureFloatY(i: Integer; d: Double): DWORD;
7234
  begin
8231
  begin
7235
    Result := Comp2DWORD(d*TexYFloat[i]);
8232
    Result := Comp2DWORD(d*TexYFloat[i]);
7236
  end;
8233
  end;
7237
 
8234
 
-
 
8235
  function FloatToRHWFloat(d: Extended): Comp;
-
 
8236
  begin
-
 
8237
    Result := d*Int32Value;
-
 
8238
  end;
-
 
8239
 
7238
  procedure drawline(x1, x2, y: Integer;
8240
  procedure drawline(x1, x2, y: Integer;
7239
    const x_ntex1, x_ntex2: T2DAxis64Array;
8241
    const x_ntex1, x_ntex2: T2DAxis64Array;
7240
    const x_nc1, x_nc2: TCol64Array);
8242
    const x_nc1, x_nc2: TCol64Array;
-
 
8243
    const x_nRHW1, x_nRHW2: Comp);
7241
  var
8244
  var
7242
    i, xcount, xcount2, ofs: Integer;
8245
    i, xcount, xcount2, ofs: Integer;
7243
  begin
8246
  begin
7244
    xcount := x2-x1;
8247
    xcount := x2-x1;
7245
    xcount2 := xcount;
8248
    xcount2 := xcount;
Line 7309... Line 8312...
7309
            nColor.A := nColor.A + iColor.A*ofs;
8312
            nColor.A := nColor.A + iColor.A*ofs;
7310
          end;
8313
          end;
7311
        end;
8314
        end;
7312
      end;
8315
      end;
7313
 
8316
 
-
 
8317
    with DXRMachine.RHW do
-
 
8318
    begin
-
 
8319
      if Enable then
-
 
8320
      begin
-
 
8321
        nRHW := x_nRHW1;
-
 
8322
        iRHW := (x_nRHW2-x_nRHW1) / xcount;
-
 
8323
        if ofs<>0 then
-
 
8324
          nRHW := nRHW + iRHW*ofs;
-
 
8325
      end;
-
 
8326
    end;
-
 
8327
 
7314
    DXRMachine.Run(xcount2);
8328
    DXRMachine.Run(xcount2);
7315
  end;
8329
  end;
7316
 
8330
 
7317
  procedure draw(p1, pt1, p2, pt2: PDXR_Vertex; starty, ycount, y1, y2, ofs1, ofs2: Integer);
8331
  procedure draw(p1, pt1, p2, pt2: PDXR_Vertex; starty, ycount, y1, y2, ofs1, ofs2: Integer);
7318
  var
8332
  var
7319
    i, j, y: Integer;
8333
    i, j, y: Integer;
7320
    c1, c2, c2_1, c2_2: TDXR_Color;
8334
    c1, c2, c2_1, c2_2: TDXR_Color;
7321
    y_nx1, y_nx2, y_ix1, y_ix2: Comp;
8335
    y_nx1, y_nx2, y_ix1, y_ix2: Comp;
7322
    y_ntex1, y_ntex2, y_itex1, y_itex2: T2DAxis64Array;
8336
    y_ntex1, y_ntex2, y_itex1, y_itex2: T2DAxis64Array;
7323
    y_nc1, y_nc2, y_ic1, y_ic2: TCol64Array;
8337
    y_nc1, y_nc2, y_ic1, y_ic2: TCol64Array;
-
 
8338
    y_nRHW1, y_nRHW2, y_iRHW1, y_iRHW2: Comp;
7324
  begin
8339
  begin
7325
    if ycount<=0 then Exit;
8340
    if ycount<=0 then Exit;
7326
    if y1=0 then Exit;
8341
    if y1=0 then Exit;
7327
    if y2=0 then Exit;
8342
    if y2=0 then Exit;
7328
 
8343
 
Line 7434... Line 8449...
7434
          y_nc2[i].B := y_nc2[i].B + y_ic2[i].B*ofs2;
8449
          y_nc2[i].B := y_nc2[i].B + y_ic2[i].B*ofs2;
7435
          y_nc2[i].A := y_nc2[i].A + y_ic2[i].A*ofs2;
8450
          y_nc2[i].A := y_nc2[i].A + y_ic2[i].A*ofs2;
7436
        end;
8451
        end;
7437
      end;
8452
      end;
7438
 
8453
 
-
 
8454
    if DXRMachine.RHW.Enable then
-
 
8455
    begin
-
 
8456
      y_nRHW1 := FloatToRHWFloat(p1.rhw);
-
 
8457
      y_nRHW2 := FloatToRHWFloat(p2.rhw);
-
 
8458
      y_iRHW1 := FloatToRHWFloat((pt1.rhw-p1.rhw)/y1);
-
 
8459
      y_iRHW2 := FloatToRHWFloat((pt2.rhw-p2.rhw)/y2);
-
 
8460
 
-
 
8461
      if ofs1<>0 then
-
 
8462
      begin
-
 
8463
        y_nRHW1 := y_nRHW1 + y_iRHW1*ofs1;
-
 
8464
      end;
-
 
8465
 
-
 
8466
      if ofs2<>0 then
-
 
8467
      begin
-
 
8468
        y_nRHW2 := y_nRHW2 + y_iRHW2*ofs2;
-
 
8469
      end;
-
 
8470
    end else
-
 
8471
    begin
-
 
8472
      y_nRHW1 := 0;
-
 
8473
      y_nRHW2 := 0;
-
 
8474
      y_iRHW1 := 0;
-
 
8475
      y_iRHW2 := 0;
-
 
8476
    end;
-
 
8477
 
7439
    for y:=starty to starty+ycount-1 do
8478
    for y:=starty to starty+ycount-1 do
7440
    begin
8479
    begin
7441
      if States.EnableDrawLine and (1 shl (y and 31))<>0 then
8480
      if (States.EnableDrawLine=0) or ((States.EnableDrawLine-1)=y mod 2) then
7442
        if PInteger(Integer(@y_nx1)+4)^<PInteger(Integer(@y_nx2)+4)^ then
8481
        if PInteger(Integer(@y_nx1)+4)^<PInteger(Integer(@y_nx2)+4)^ then
7443
        begin
8482
        begin
7444
          drawline(
8483
          drawline(
7445
            PInteger(Integer(@y_nx1)+4)^, PInteger(Integer(@y_nx2)+4)^, y,
8484
            PInteger(Integer(@y_nx1)+4)^, PInteger(Integer(@y_nx2)+4)^, y,
7446
            y_ntex1, y_ntex2,
8485
            y_ntex1, y_ntex2,
7447
            y_nc1, y_nc2
8486
            y_nc1, y_nc2,
-
 
8487
            y_nRHW1, y_nRHW2
7448
          );
8488
          );
7449
        end else if PInteger(Integer(@y_nx1)+4)^>PInteger(Integer(@y_nx2)+4)^ then
8489
        end else if PInteger(Integer(@y_nx1)+4)^>PInteger(Integer(@y_nx2)+4)^ then
7450
        begin
8490
        begin
7451
          drawline(
8491
          drawline(
7452
            PInteger(Integer(@y_nx2)+4)^, PInteger(Integer(@y_nx1)+4)^, y,
8492
            PInteger(Integer(@y_nx2)+4)^, PInteger(Integer(@y_nx1)+4)^, y,
7453
            y_ntex2, y_ntex1,
8493
            y_ntex2, y_ntex1,
7454
            y_nc2, y_nc1
8494
            y_nc2, y_nc1,
-
 
8495
            y_nRHW2, y_nRHW1
7455
          );
8496
          );
7456
        end;
8497
        end;
7457
 
8498
 
7458
      y_nx1 := y_nx1 + y_ix1;
8499
      y_nx1 := y_nx1 + y_ix1;
7459
      y_nx2 := y_nx2 + y_ix2;
8500
      y_nx2 := y_nx2 + y_ix2;
Line 7480... Line 8521...
7480
            y_nc2[i].G := y_nc2[i].G + y_ic2[i].G;
8521
            y_nc2[i].G := y_nc2[i].G + y_ic2[i].G;
7481
            y_nc2[i].B := y_nc2[i].B + y_ic2[i].B;
8522
            y_nc2[i].B := y_nc2[i].B + y_ic2[i].B;
7482
            y_nc2[i].A := y_nc2[i].A + y_ic2[i].A;
8523
            y_nc2[i].A := y_nc2[i].A + y_ic2[i].A;
7483
          end;
8524
          end;
7484
        end;
8525
        end;
-
 
8526
 
-
 
8527
      if DXRMachine.RHW.Enable then
-
 
8528
      begin
-
 
8529
        y_nRHW1 := y_nRHW1 + y_iRHW1;
-
 
8530
        y_nRHW2 := y_nRHW2 + y_iRHW2;
-
 
8531
      end;
7485
    end;
8532
    end;
7486
  end;
8533
  end;
7487
 
8534
 
7488
var
8535
var
7489
  p: array[0..2] of PDXR_Vertex;
8536
  p: array[0..2] of PDXR_Vertex;
Line 7519... Line 8566...
7519
  if (p[2].sy<=0) or (p[0].sy>=Dest.Height) then Exit;
8566
  if (p[2].sy<=0) or (p[0].sy>=Dest.Height) then Exit;
7520
  if (p[0].sx<0) and (p[1].sx<0) and (p[2].sx<0) then Exit;
8567
  if (p[0].sx<0) and (p[1].sx<0) and (p[2].sx<0) then Exit;
7521
  if (p[0].sx>=Dest.Width) and (p[1].sx>=Dest.Width) and (p[2].sx>=Dest.Width) then Exit;
8568
  if (p[0].sx>=Dest.Width) and (p[1].sx>=Dest.Width) and (p[2].sx>=Dest.Width) then Exit;
7522
 
8569
 
7523
  {  Generate code  }
8570
  {  Generate code  }
-
 
8571
  if States.TextureFilter in [DXR_TEXTUREFILTER_MIPMAP_NEAREST, DXR_TEXTUREFILTER_MIPMAP_LINEAR] then
-
 
8572
    DXRMachine.Compiled := False;
-
 
8573
 
7524
  if not DXRMachine.Compiled then
8574
  if not DXRMachine.Compiled then
7525
    InitGenerator;
8575
    InitGenerator;
7526
 
8576
 
7527
  y1 := Trunc(p[1].sy)-Trunc(p[0].sy);
8577
  y1 := Trunc(p[1].sy)-Trunc(p[0].sy);
7528
  y2 := Trunc(p[2].sy)-Trunc(p[1].sy);
8578
  y2 := Trunc(p[2].sy)-Trunc(p[1].sy);
Line 7677... Line 8727...
7677
  mov eax, a
8727
  mov eax, a
7678
  imul b
8728
  imul b
7679
  idiv c
8729
  idiv c
7680
end;
8730
end;
7681
 
8731
 
7682
function Max(B1, B2: Integer): Integer;
8732
function Max(B1, B2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
7683
begin
8733
begin
7684
  if B1>=B2 then Result := B1 else Result := B2;
8734
  if B1>=B2 then Result := B1 else Result := B2;
7685
end;
8735
end;
7686
 
8736
 
7687
function Min(B1, B2: Integer): Integer;
8737
function Min(B1, B2: Integer): Integer; {$IFDEF VER9UP}inline;{$ENDIF}
7688
begin
8738
begin
7689
  if B1<=B2 then Result := B1 else Result := B2;
8739
  if B1<=B2 then Result := B1 else Result := B2;
7690
end;
8740
end;
7691
 
8741
 
7692
function BltClipX(const Dest, Src: TDXR_Surface;
8742
function BltClipX(const Dest, Src: TDXR_Surface;
7693
  var StartX, EndX, StartSrcX: Integer): Boolean;
8743
  var StartX, EndX, StartSrcX: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
7694
begin
8744
begin
7695
  if StartX<0 then
8745
  if StartX<0 then
7696
  begin
8746
  begin
7697
    StartSrcX := StartSrcX-StartX;
8747
    StartSrcX := StartSrcX-StartX;
7698
    StartX := 0;
8748
    StartX := 0;
Line 7702... Line 8752...
7702
 
8752
 
7703
  Result := (EndX>0) and (EndX-StartX>0);
8753
  Result := (EndX>0) and (EndX-StartX>0);
7704
end;
8754
end;
7705
 
8755
 
7706
function BltClipY(const Dest, Src: TDXR_Surface;
8756
function BltClipY(const Dest, Src: TDXR_Surface;
7707
  var StartY, EndY, StartSrcY: Integer): Boolean;
8757
  var StartY, EndY, StartSrcY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
7708
begin
8758
begin
7709
  if StartY<0 then
8759
  if StartY<0 then
7710
  begin
8760
  begin
7711
    StartSrcY := StartSrcY-StartY;
8761
    StartSrcY := StartSrcY-StartY;
7712
    StartY := 0;
8762
    StartY := 0;
Line 7716... Line 8766...
7716
 
8766
 
7717
  Result := (EndY>0) and (EndY-StartY>0);
8767
  Result := (EndY>0) and (EndY-StartY>0);
7718
end;
8768
end;
7719
 
8769
 
7720
function BltClip(const Dest, Src: TDXR_Surface;
8770
function BltClip(const Dest, Src: TDXR_Surface;
7721
  var StartX, StartY, EndX, EndY, StartSrcX, StartSrcY: Integer): Boolean;
8771
  var StartX, StartY, EndX, EndY, StartSrcX, StartSrcY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
7722
begin
8772
begin
7723
  Result := BltClipX(Dest, Src, StartX, EndX, StartSrcX) and
8773
  Result := BltClipX(Dest, Src, StartX, EndX, StartSrcX) and
7724
    BltClipY(Dest, Src, StartY, EndY, StartSrcY);
8774
    BltClipY(Dest, Src, StartY, EndY, StartSrcY);
7725
end;
8775
end;
7726
 
8776
 
7727
function FillClip(const Dest: TDXR_Surface;
8777
function FillClip(const Dest: TDXR_Surface;
7728
  var StartX, StartY, EndX, EndY: Integer): Boolean;
8778
  var StartX, StartY, EndX, EndY: Integer): Boolean; {$IFDEF VER9UP}inline;{$ENDIF}
7729
begin
8779
begin
7730
  StartX := Max(StartX, 0);
8780
  StartX := Max(StartX, 0);
7731
  StartY := Max(StartY, 0);
8781
  StartY := Max(StartY, 0);
7732
  EndX := Min(EndX, Dest.Width);
8782
  EndX := Min(EndX, Dest.Width);
7733
  EndY := Min(EndY, Dest.Height);
8783
  EndY := Min(EndY, Dest.Height);
Line 7736... Line 8786...
7736
end;
8786
end;
7737
 
8787
 
7738
var
8788
var
7739
  CosinTable: array[0..255] of Double;
8789
  CosinTable: array[0..255] of Double;
7740
 
8790
 
7741
procedure InitCosinTable;
8791
procedure InitCosinTable; {$IFDEF VER9UP}inline;{$ENDIF}
7742
var
8792
var
7743
  i: Integer;
8793
  i: Integer;
7744
begin
8794
begin
7745
  for i:=Low(CosinTable) to High(CosinTable) do
8795
  for i:=Low(CosinTable) to High(CosinTable) do
7746
    CosinTable[i] := Cos((i/256)*2*PI);
8796
    CosinTable[i] := Cos((i/256)*2*PI);
7747
end;
8797
end;
7748
 
8798
 
7749
function Cos256(i: Integer): Double;
8799
function Cos256(i: Integer): Double; {$IFDEF VER9UP}inline;{$ENDIF}
7750
begin
8800
begin
7751
  Result := CosinTable[i and 255];
8801
  Result := CosinTable[i and 255];
7752
end;
8802
end;
7753
 
8803
 
7754
function Sin256(i: Integer): Double;
8804
function Sin256(i: Integer): Double; {$IFDEF VER9UP}inline;{$ENDIF}
7755
begin
8805
begin
7756
  Result := CosinTable[(i+192) and 255];
8806
  Result := CosinTable[(i+192) and 255];
7757
end;
8807
end;
7758
 
8808
 
7759
function RotationClip(const Dest, Src: TDXR_Surface;
8809
function RotationClip(const Dest, Src: TDXR_Surface;
Line 8070... Line 9120...
8070
    sx := sx - yIncX;
9120
    sx := sx - yIncX;
8071
    sy := sy + yIncY;
9121
    sy := sy + yIncY;
8072
  end;
9122
  end;
8073
end;
9123
end;
8074
 
9124
 
-
 
9125
//var TextureSurface, DestSurface: TDXR_Surface; RenderStates: TDXR_RenderStates;
-
 
9126
//
-
 
9127
//dxrDefRenderStates(RenderStates);
-
 
9128
//if dxrDDSurfaceLock(Surf.ISurface, DestSurface then begin
-
 
9129
//  dxrDDSurfaceLock(TextureSurface as IDirectDrawSurface, TextureSurface);
-
 
9130
//  RenderStates.TextureList<0>.Surface:=@TextureSurface;
-
 
9131
//  dxrDrawPrimitive(DestSurface, RenderStates, DXR_PRIMITIVETYPE_TRIANGLELIST, @VertexList, 36);
-
 
9132
//  dxrDDSurfaceUnlock(SurfaceTexture as IDirectDrawSurface, TextureSurface);
-
 
9133
//  dxrDDSurfaceUnlock(Surf.ISurface, DestSurface);
-
 
9134
//end;
-
 
9135
 
8075
initialization
9136
initialization
8076
  ReadCPUID;
9137
  ReadCPUID;
8077
  Init;
9138
  Init;
8078
  InitCosinTable;
9139
  InitCosinTable;
-
 
9140
 
-
 
9141
  dxrSetOption(DXR_OPTION_MMXENABLE, 1);
8079
finalization
9142
finalization
8080
  FDXRMachine.Free;
9143
  FDXRMachine.Free;
8081
end.
9144
end.