Skapa en brytpunktsbuffert (Direct3D 9)
Du skapar ett hörnbuffertobjekt genom att anropa metoden IDirect3DDevice9::CreateVertexBuffer som accepterar fem parametrar. Den första parametern anger brytpunktsbuffertlängden i byte. Använd sizeof-operatorn för att fastställa storleken på ett vertexformat i byte. Överväg följande anpassade vertexformat.
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // Texture coordinates
};
// Custom flexible vertex format (FVF) describing the custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
Om du vill skapa en hörnbuffert som innehåller fyra CUSTOMVERTEX-strukturer anger du [4*sizeof(CUSTOMVERTEX)] för parametern Length.
Den andra parametern är en uppsättning användningskontroller. Bland annat avgör dess värde om hörnbufferten kan innehålla urklippsinformation – i form av klippflaggor – för hörn som finns utanför visningsområdet. Om du vill skapa en brytpunktsbuffert som inte kan innehålla klippflaggor tar du med flaggan D3DUSAGE_DONOTCLIP för parametern Usage. Flaggan D3DUSAGE_DONOTCLIP tillämpas endast om du också anger att hörnbufferten ska innehålla transformerade hörn – flaggan D3DFVF_XYZRHW ingår i parametern FVF. Metoden IDirect3DDevice9::CreateVertexBuffer ignorerar flaggan D3DUSAGE_DONOTCLIP om du anger att bufferten ska innehålla otransformerade hörn (flaggan D3DFVF_XYZ). Urklippsflaggor upptar ytterligare minne, vilket gör en urklippskompatibel hörnbuffert något större än en brytpunktsbuffert som inte kan innehålla urklippsflaggor. Eftersom dessa resurser allokeras när vertexbufferten skapas måste du begära en klippkompatibel vertexbuffert i god tid.
Den tredje parametern, FVF, är en kombination av D3DFVF som beskriver hörnformatet för hörnbufferten. Om du anger 0 för den här parametern är hörnbufferten en buffert som inte är FVF-hörnbuffert. Mer information finns i FVF-vertexbuffertar (Direct3D 9). Den fjärde parametern beskriver den minnesklass som hörnbufferten ska placeras i.
Den sista parametern som IDirect3DDevice9::CreateVertexBuffer accepterar är adressen till en variabel som fylls med en pekare till den nya IDirect3DVertexBuffer9 gränssnitt för hörnbuffertobjektet, om anropet lyckas.
Du kan inte skapa klippflaggor för en hörnbuffert som skapades utan stöd för dem.
Följande C++-kodexempel visar hur det kan se ut att skapa en brytpunktsbuffert i koden.
// d3dDevice contains the address of an IDirect3DDevice9 interface
// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9
// The custom vertex type
struct CUSTOMVERTEX {
FLOAT x, y, z;
FLOAT rhw;
DWORD color;
FLOAT tu, tv; // The texture coordinates
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)
// Create a clipping-capable vertex buffer. Allocate enough memory
// in the default memory pool to hold three CUSTOMVERTEX
// structures
if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
return E_FAIL;
Relaterade ämnen