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