📄 directxgraphics.pas
字号:
[31:29] = $2
[28] = $1
[27:20] = $0
[19:16] count of DWORDS to skip over (0..15)
[15:00] = $0
Vertex Input Memory from Tessellator Data (single DWORD token)
[31:29] = $3
[28] indicates whether data is normals or u/v
[27:24] = $0
[23:20] vertex register address (0..15)
[19:16] type (dimensionality)
[15:04] = $0
[03:00] vertex register address (0..15)
Constant Memory from Shader (multiple DWORD token)
[31:29] = $4
[28:25] count of 4*DWORD constants to load (0..15)
[24:07] = $0
[06:00] constant memory address (0..95)
Extension Token (single or multiple DWORD token)
[31:29] = $5
[28:24] count of additional DWORDs in token (0..31)
[23:00] extension-specific information
End-of-array token (single DWORD token)
[31:29] = $7
[28:00] = $1fffffff
The stream selector token must be immediately followed by a contiguous set of stream data definition tokens. This token sequence fully defines that stream; including the set of elements within the stream; the order in which the elements appear; the type of each element; and the vertex register into which to load an element.
Streams are allowed to include data which is not loaded into a vertex register; thus allowing data which is not used for this shader to exist in the vertex stream. This skipped data is defined only by a count of DWORDs to skip over; since the type information is irrelevant.
The token sequence:
Stream Select: stream=0
Stream Data Definition (Load): type=FLOAT3; register=3
Stream Data Definition (Load): type=FLOAT3; register=4
Stream Data Definition (Skip): count=2
Stream Data Definition (Load): type=FLOAT2; register=7
defines stream zero to consist of 4 elements; 3 of which are loaded into registers and the fourth skipped over. Register 3 is loaded with the first three DWORDs in each vertex interpreted as FLOAT data. Register 4 is loaded with the 4th; 5th; and 6th DWORDs interpreted as FLOAT data. The next two DWORDs (7th and 8th) are skipped over and not loaded into any vertex input register. Register 7 is loaded with the 9th and 10th DWORDS interpreted as FLOAT data.
Placing of tokens other than NOPs between the Stream Selector and Stream Data Definition tokens is disallowed.
*)
type TD3DVSDTokenType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DVSD_TOKEN_NOP = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // NOP or extension
D3DVSD_TOKEN_STREAM = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // stream selector
D3DVSD_TOKEN_STREAMDATA = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // stream data definition (map to vertex input memory)
D3DVSD_TOKEN_TESSELLATOR = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // vertex input memory from tessellator
D3DVSD_TOKEN_CONSTMEM = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // constant memory from shader
D3DVSD_TOKEN_EXT = 5{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // extension
D3DVSD_TOKEN_END = 7{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // end-of-array (requires all DWORD bits to be 1)
D3DVSD_TOKENTYPESHIFT = 29{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_TOKENTYPEMASK = 7 shl D3DVSD_TOKENTYPESHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_STREAMNUMBERSHIFT = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_STREAMNUMBERMASK = $F shl D3DVSD_STREAMNUMBERSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_DATALOADTYPESHIFT = 28{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_DATALOADTYPEMASK = $1 shl D3DVSD_DATALOADTYPESHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_DATATYPESHIFT = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_DATATYPEMASK = $F shl D3DVSD_DATATYPESHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_SKIPCOUNTSHIFT = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_SKIPCOUNTMASK = $F shl D3DVSD_SKIPCOUNTSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_VERTEXREGSHIFT = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_VERTEXREGMASK = $1F shl D3DVSD_VERTEXREGSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_VERTEXREGINSHIFT = 20{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_VERTEXREGINMASK = $F shl D3DVSD_VERTEXREGINSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTCOUNTSHIFT = 25{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTCOUNTMASK = $F shl D3DVSD_CONSTCOUNTSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTADDRESSSHIFT = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTADDRESSMASK = $7F shl D3DVSD_CONSTADDRESSSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTRSSHIFT = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_CONSTRSMASK = $1FFF shl D3DVSD_CONSTRSSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_EXTCOUNTSHIFT = 24{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_EXTCOUNTMASK = $1F shl D3DVSD_EXTCOUNTSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_EXTINFOSHIFT = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_EXTINFOMASK = $FFFFFF shl D3DVSD_EXTINFOSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
// Set tessellator stream
D3DVSD_STREAMTESSSHIFT = 28{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_STREAMTESSMASK = 1 shl D3DVSD_STREAMTESSSHIFT{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_STREAM_TESS = ((D3DVSD_TOKEN_STREAM shl D3DVSD_TOKENTYPESHIFT) and D3DVSD_TOKENTYPEMASK) or D3DVSD_STREAMTESSMASK{$IFNDEF NOENUMS},{$ELSE};{$ENDIF}
D3DVSD_FORCE_DWORD = $7fffffff{$IFNDEF NOENUMS}){$ENDIF}; // force 32-bit size enum
function D3DVSD_MAKETOKENTYPE(tokenType : TD3DVSDTokenType) : TD3DVSDTokenType;
// macros for generation of CreateVertexShader Declaration token array
// Set current stream
// _StreamNumber [0..(MaxStreams-1)] stream to get data from
//
function D3DVSD_STREAM(_StreamNumber : LongWord) : TD3DVSDTokenType;
type TD3DVSD_TokenType = TD3DVSDTokenType;
// bind single vertex register to vertex element from vertex stream
//
// _VertexRegister [0..15] address of the vertex register
// _Type [D3DVSDT_*] dimensionality and arithmetic data type
function D3DVSD_REG( _VertexRegister, _Type : LongWord) : TD3DVSDTokenType;
// Skip _DWORDCount DWORDs in vertex
//
function D3DVSD_SKIP(_DWORDCount : LongWord) : TD3DVSDTokenType;
// load data into vertex shader constant memory
//
// _ConstantAddress [0..95] - address of constant array to begin filling data
// _Count [0..15] - number of constant vectors to load (4 DWORDs each)
// followed by 4*_Count DWORDS of data
//
function D3DVSD_CONST( _ConstantAddress, _Count : LongWord) : TD3DVSDTokenType;
// enable tessellator generated normals
//
// _VertexRegisterIn [0..15] address of vertex register whose input stream
// will be used in normal computation
// _VertexRegisterOut [0..15] address of vertex register to output the normal to
//
function D3DVSD_TESSNORMAL( _VertexRegisterIn, _VertexRegisterOut : LongWord) : TD3DVSDTokenType;
// enable tessellator generated surface parameters
//
// _VertexRegister [0..15] address of vertex register to output parameters
//
function D3DVSD_TESSUV( _VertexRegister : LongWord) : TD3DVSDTokenType;
// Generates END token
//
const
D3DVSD_END = $FFFFFFFF;
// Generates NOP token
D3DVSD_NOP = $00000000;
// bit declarations for _Type fields
D3DVSDT_FLOAT1 = $00; // 1D float expanded to (value; 0.; 0.; 1.)
D3DVSDT_FLOAT2 = $01; // 2D float expanded to (value; value; 0.; 1.)
D3DVSDT_FLOAT3 = $02; // 3D float expanded to (value; value; value; 1.)
D3DVSDT_FLOAT4 = $03; // 4D float
D3DVSDT_D3DCOLOR = $04; // 4D packed unsigned bytes mapped to 0. to 1. range
// Input is in D3DCOLOR format (ARGB) expanded to (R; G; B; A)
D3DVSDT_UBYTE4 = $05; // 4D unsigned byte
D3DVSDT_SHORT2 = $06; // 2D signed short expanded to (value; value; 0.; 1.)
D3DVSDT_SHORT4 = $07; // 4D signed short
// assignments of vertex input registers for fixed function vertex shader
//
D3DVSDE_POSITION = 0;
D3DVSDE_BLENDWEIGHT = 1;
D3DVSDE_BLENDINDICES = 2;
D3DVSDE_NORMAL = 3;
D3DVSDE_PSIZE = 4;
D3DVSDE_DIFFUSE = 5;
D3DVSDE_SPECULAR = 6;
D3DVSDE_TEXCOORD0 = 7;
D3DVSDE_TEXCOORD1 = 8;
D3DVSDE_TEXCOORD2 = 9;
D3DVSDE_TEXCOORD3 = 10;
D3DVSDE_TEXCOORD4 = 11;
D3DVSDE_TEXCOORD5 = 12;
D3DVSDE_TEXCOORD6 = 13;
D3DVSDE_TEXCOORD7 = 14;
D3DVSDE_POSITION2 = 15;
D3DVSDE_NORMAL2 = 16;
// Maximum supported number of texture coordinate sets
D3DDP_MAXTEXCOORD = 8;
//
// Instruction Token Bit Definitions
//
D3DSI_OPCODE_MASK = $0000FFFF;
type
TD3DShaderInstructionOpcodeType = {$IFNDEF NOENUMS}({$ELSE}LongWord;{$ENDIF}
{$IFDEF NOENUMS}const{$ENDIF}
D3DSIO_NOP = 0{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_MOV = 1{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_ADD = 2{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_SUB = 3{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_MAD = 4{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_MUL = 5{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_RCP = 6{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_RSQ = 7{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_DP3 = 8{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_DP4 = 9{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS/VS
D3DSIO_MIN = 10{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_MAX = 11{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_SLT = 12{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_SGE = 13{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_EXP = 14{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_LOG = 15{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_LIT = 16{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_DST = 17{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_LRP = 18{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_FRC = 19{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_M4x4 = 20{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_M4x3 = 21{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_M3x4 = 22{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_M3x3 = 23{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_M3x2 = 24{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_TEXCOORD = 64{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXKILL = 65{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEX = 66{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXBEM = 67{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXBEML = 68{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXREG2AR = 69{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXREG2GB = 70{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x2PAD = 71{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x2TEX = 72{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3PAD = 73{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3TEX = 74{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3DIFF = 75{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3SPEC = 76{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3VSPEC = 77{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_EXPP = 78{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_LOGP = 79{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // VS
D3DSIO_CND = 80{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_DEF = 81{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
{$IFNDEF DX8}
D3DSIO_TEXREG2RGB = 82{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXDP3TEX = 83{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x2DEPTH = 84{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXDP3 = 85{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXM3x3 = 86{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_TEXDEPTH = 87{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_CMP = 88{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
D3DSIO_BEM = 89{$IFNDEF NOENUMS},{$ELSE};{$ENDIF} // PS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -