Subversion Repositories spacemission

Rev

Rev 1 | 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 <