📄 direct3d9.pas
字号:
(* Flags to construct the WRAP render states *)
D3DWRAP_U = $00000001;
D3DWRAP_V = $00000002;
D3DWRAP_W = $00000004;
(* Flags to construct the WRAP render states for 1D thru 4D texture coordinates *)
D3DWRAPCOORD_0 = $00000001; // same as D3DWRAP_U
D3DWRAPCOORD_1 = $00000002; // same as D3DWRAP_V
D3DWRAPCOORD_2 = $00000004; // same as D3DWRAP_W
D3DWRAPCOORD_3 = $00000008;
(* Flags to construct D3DRS_COLORWRITEENABLE *)
D3DCOLORWRITEENABLE_RED = 1; // (1L<<0)
D3DCOLORWRITEENABLE_GREEN = 2; // (1L<<1)
D3DCOLORWRITEENABLE_BLUE = 4; // (1L<<2)
D3DCOLORWRITEENABLE_ALPHA = 8; // (1L<<3)
(*)
* State enumerants for per-stage processing of fixed function pixel processing
* Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX.
(*)
type
TD3DTextureStageStateType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DTSS_COLOROP = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREOP - per-stage blending controls for color channels *)
D3DTSS_COLORARG1 = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* (texture arg) *)
D3DTSS_COLORARG2 = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* (texture arg) *)
D3DTSS_ALPHAOP = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREOP - per-stage blending controls for alpha channel *)
D3DTSS_ALPHAARG1 = 5{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* (texture arg) *)
D3DTSS_ALPHAARG2 = 6{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* (texture arg) *)
D3DTSS_BUMPENVMAT00 = 7{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float (bump mapping matrix) *)
D3DTSS_BUMPENVMAT01 = 8{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float (bump mapping matrix) *)
D3DTSS_BUMPENVMAT10 = 9{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float (bump mapping matrix) *)
D3DTSS_BUMPENVMAT11 = 10{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float (bump mapping matrix) *)
D3DTSS_TEXCOORDINDEX = 11{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* identifies which set of texture coordinates index this texture *)
D3DTSS_BUMPENVLSCALE = 22{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float scale for bump map luminance *)
D3DTSS_BUMPENVLOFFSET = 23{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float offset for bump map luminance *)
D3DTSS_TEXTURETRANSFORMFLAGS = 24{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTURETRANSFORMFLAGS controls texture transform *)
D3DTSS_COLORARG0 = 26{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* third arg for triadic ops *)
D3DTSS_ALPHAARG0 = 27{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* third arg for triadic ops *)
D3DTSS_RESULTARG = 28{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTA_* arg for result (CURRENT or TEMP) *)
D3DTSS_CONSTANT = 32{$IFNDEF NOENUMS}){$ENDIF}; (* Per-stage constant D3DTA_CONSTANT *)
(*)
* State enumerants for per-sampler texture processing.
(*)
type
TD3DSamplerStateType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSAMP_ADDRESSU = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREADDRESS for U coordinate *)
D3DSAMP_ADDRESSV = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREADDRESS for V coordinate *)
D3DSAMP_ADDRESSW = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREADDRESS for W coordinate *)
D3DSAMP_BORDERCOLOR = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DCOLOR *)
D3DSAMP_MAGFILTER = 5{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREFILTER filter to use for magnification *)
D3DSAMP_MINFILTER = 6{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREFILTER filter to use for minification *)
D3DSAMP_MIPFILTER = 7{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* D3DTEXTUREFILTER filter to use between mipmaps during minification *)
D3DSAMP_MIPMAPLODBIAS = 8{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* float Mipmap LOD bias *)
D3DSAMP_MAXMIPLEVEL = 9{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) *)
D3DSAMP_MAXANISOTROPY = 10{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* DWORD maximum anisotropy *)
D3DSAMP_SRGBTEXTURE = 11{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* Default = 0 (which means Gamma 1.0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
no correction required.) else correct for
Gamma = 2.2 *)
D3DSAMP_ELEMENTINDEX = 12{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} (* When multi-element texture is assigned to sampler{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} this
indicates which element index to use. Default = 0. *)
D3DSAMP_DMAPOFFSET = 13{$IFNDEF NOENUMS}){$ENDIF}; (* Offset in vertices in the pre-sampled displacement map.
Only valid for D3DDMAPSAMPLER sampler *)
(* Special sampler which is used in the tesselator *)
const
D3DDMAPSAMPLER = 256;
// Samplers used in vertex shaders
D3DVERTEXTEXTURESAMPLER0 = (D3DDMAPSAMPLER + 1);
D3DVERTEXTEXTURESAMPLER1 = (D3DDMAPSAMPLER + 2);
D3DVERTEXTEXTURESAMPLER2 = (D3DDMAPSAMPLER + 3);
D3DVERTEXTEXTURESAMPLER3 = (D3DDMAPSAMPLER + 4);
// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
// and normal in the camera space) should be taken as texture coordinates
// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
D3DTSS_TCI_PASSTHRU = $00000000;
D3DTSS_TCI_CAMERASPACENORMAL = $00010000;
D3DTSS_TCI_CAMERASPACEPOSITION = $00020000;
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR = $00030000;
D3DTSS_TCI_SPHEREMAP = $00040000;
(*)
* Enumerations for COLOROP and ALPHAOP texture blending operations set in
* texture processing stage controls in D3DTSS.
(*)
type
TD3DTextureOp = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
// Control
D3DTOP_DISABLE = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // disables stage
D3DTOP_SELECTARG1 = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // the default
D3DTOP_SELECTARG2 = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
// Modulate
D3DTOP_MODULATE = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // multiply args together
D3DTOP_MODULATE2X = 5{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // multiply and 1 bit
D3DTOP_MODULATE4X = 6{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // multiply and 2 bits
// Add
D3DTOP_ADD = 7{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // add arguments together
D3DTOP_ADDSIGNED = 8{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // add with -0.5 bias
D3DTOP_ADDSIGNED2X = 9{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // as above but left 1 bit
D3DTOP_SUBTRACT = 10{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Arg1 - Arg2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} with no saturation
D3DTOP_ADDSMOOTH = 11{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // add 2 args{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} subtract product
// Arg1 + Arg2 - Arg1*Arg2
// = Arg1 + (1-Arg1)*Arg2
// Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
D3DTOP_BLENDDIFFUSEALPHA = 12{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // iterated alpha
D3DTOP_BLENDTEXTUREALPHA = 13{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // texture alpha
D3DTOP_BLENDFACTORALPHA = 14{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // alpha from D3DRS_TEXTUREFACTOR
// Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
D3DTOP_BLENDTEXTUREALPHAPM = 15{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // texture alpha
D3DTOP_BLENDCURRENTALPHA = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // by alpha of current color
// Specular mapping
D3DTOP_PREMODULATE = 17{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // modulate with next texture before use
D3DTOP_MODULATEALPHA_ADDCOLOR = 18{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Arg1.RGB + Arg1.A*Arg2.RGB
// COLOROP only
D3DTOP_MODULATECOLOR_ADDALPHA = 19{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Arg1.RGB*Arg2.RGB + Arg1.A
// COLOROP only
D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
// COLOROP only
D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
// COLOROP only
// Bump mapping
D3DTOP_BUMPENVMAP = 22{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // per pixel env map perturbation
D3DTOP_BUMPENVMAPLUMINANCE = 23{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // with luminance channel
// This can do either diffuse or specular bump mapping with correct input.
// Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
// where each component has been scaled and offset to make it signed.
// The result is replicated into all four (including alpha) channels.
// This is a valid COLOROP only.
D3DTOP_DOTPRODUCT3 = 24{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
// Triadic ops
D3DTOP_MULTIPLYADD = 25{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // Arg0 + Arg1*Arg2
D3DTOP_LERP = 26{$IFNDEF NOENUMS}){$ENDIF}; // (Arg0)*Arg1 + (1-Arg0)*Arg2
const
(*)
* Values for COLORARG0;1;2; ALPHAARG0;1;2; and RESULTARG texture blending
* operations set in texture processing stage controls in D3DRENDERSTATE.
(*)
D3DTA_SELECTMASK = $0000000f; // mask for arg selector
D3DTA_DIFFUSE = $00000000; // select diffuse color (read only)
D3DTA_CURRENT = $00000001; // select stage destination register (read/write)
D3DTA_TEXTURE = $00000002; // select texture color (read only)
D3DTA_TFACTOR = $00000003; // select D3DRS_TEXTUREFACTOR (read only)
D3DTA_SPECULAR = $00000004; // select specular color (read only)
D3DTA_TEMP = $00000005; // select temporary register color (read/write)
D3DTA_CONSTANT = $00000006; // select texture stage constant
D3DTA_COMPLEMENT = $00000010; // take 1.0 - x (read modifier)
D3DTA_ALPHAREPLICATE = $00000020; // replicate alpha to color components (read modifier)
// Values for D3DTSS_***FILTER texture stage states
type
TD3DTextureFilterType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DTEXF_NONE = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // filtering disabled (valid for mip filter only)
D3DTEXF_POINT = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // nearest
D3DTEXF_LINEAR = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // linear interpolation
D3DTEXF_ANISOTROPIC = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // anisotropic
D3DTEXF_PYRAMIDALQUAD = 6{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // 4-sample tent
D3DTEXF_GAUSSIANQUAD = 7{$IFNDEF NOENUMS}){$ENDIF}; // 4-sample gaussian
const
(* Bits for Flags in ProcessVertices call *)
D3DPV_DONOTCOPYDATA = 1 shl 0;
//-------------------------------------------------------------------
// Flexible vertex format bits
//
D3DFVF_RESERVED0 = $001;
D3DFVF_POSITION_MASK = $400E;
D3DFVF_XYZ = $002;
D3DFVF_XYZRHW = $004;
D3DFVF_XYZB1 = $006;
D3DFVF_XYZB2 = $008;
D3DFVF_XYZB3 = $00a;
D3DFVF_XYZB4 = $00c;
D3DFVF_XYZB5 = $00e;
D3DFVF_XYZW = $4002;
D3DFVF_NORMAL = $010;
D3DFVF_PSIZE = $020;
D3DFVF_DIFFUSE = $040;
D3DFVF_SPECULAR = $080;
D3DFVF_TEXCOUNT_MASK = $f00;
D3DFVF_TEXCOUNT_SHIFT = 8;
D3DFVF_TEX0 = $000;
D3DFVF_TEX1 = $100;
D3DFVF_TEX2 = $200;
D3DFVF_TEX3 = $300;
D3DFVF_TEX4 = $400;
D3DFVF_TEX5 = $500;
D3DFVF_TEX6 = $600;
D3DFVF_TEX7 = $700;
D3DFVF_TEX8 = $800;
D3DFVF_LASTBETA_UBYTE4 = $1000;
D3DFVF_LASTBETA_D3DCOLOR = $8000;
D3DFVF_RESERVED2 = $6000; // 2 reserved bits
//---------------------------------------------------------------------
// Vertex Shaders
//
// Vertex shader declaration
// Vertex element semantics
//
{$MINENUMSIZE 1}
type
TD3DDeclUsage = {$IFNDEF NOENUMS}({$ELSE}Byte;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DDECLUSAGE_POSITION = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DDECLUSAGE_BLENDWEIGHT = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DDECLUSAGE_BLENDINDICES = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DDECLUSAGE_NORMAL = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DDECLUSAGE_PSIZE = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -