Een hoekpuntbuffer maken (Direct3D 9)
U maakt een hoekpuntbufferobject door de methode IDirect3DDevice9::CreateVertexBuffer methode aan te roepen, die vijf parameters accepteert. De eerste parameter geeft de lengte van de hoekpuntbuffer op, in bytes. Gebruik de sizeof-operator om de grootte van een vertexformaat in bytes te bepalen. Houd rekening met de volgende aangepaste hoekpuntindeling.
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)
Als u een hoekpuntbuffer wilt maken voor het opslaan van vier CUSTOMVERTEX-structuren, geeft u [4*sizeof(CUSTOMVERTEX)] op voor de parameter Length.
De tweede parameter is een set gebruiksbesturingselementen. De waarde bepaalt onder andere of de hoekpuntbuffer in staat is om knipgegevens te bevatten , in de vorm van clipvlagmen - voor hoekpunten die buiten het weergavegebied bestaan. Als u een hoekpuntbuffer wilt maken die geen clipvlagmen kan bevatten, neemt u de D3DUSAGE_DONOTCLIP vlag op voor de parameter Usage. De D3DUSAGE_DONOTCLIP vlag wordt alleen toegepast als u ook aangeeft dat de hoekpuntbuffer getransformeerde hoekpunten bevat. De vlag D3DFVF_XYZRHW is opgenomen in de parameter FVF-. De methode IDirect3DDevice9::CreateVertexBuffer negeert de D3DUSAGE_DONOTCLIP vlag als u aangeeft dat de buffer niet-vertaalde hoekpunten bevat (de vlag D3DFVF_XYZ). Knipvlaggen nemen extra geheugen in beslag, waardoor een hoekpuntbuffer die geschikt is voor knipvlaggen iets groter is dan een hoekpuntbuffer die niet in staat is knipvlaggen te bevatten. Omdat deze resources worden toegewezen wanneer de hoekpuntbuffer wordt gemaakt, moet u van tevoren een hoekpuntbuffer aanvragen die knipsels ondersteunt.
De derde parameter, FVF, is een combinatie van D3DFVF- die de hoekpuntindeling van de hoekpuntbuffer beschrijven. Als u 0 opgeeft voor deze parameter, is de hoekpuntbuffer een niet-FVF-hoekpuntbuffer. Zie FVF Vertex Buffers (Direct3D 9)voor meer informatie. De vierde parameter beschrijft de geheugenklasse waarin de hoekpuntbuffer moet worden geplaatst.
De laatste parameter die IDirect3DDevice9::CreateVertexBuffer accepteert, is het adres van een variabele die wordt gevuld met een aanwijzer naar de nieuwe IDirect3DVertexBuffer9 interface van het hoekpuntbufferobject, als de aanroep slaagt.
U kunt geen clipvlagmen produceren voor een hoekpuntbuffer die zonder ondersteuning is gemaakt.
In het volgende C++-codevoorbeeld ziet u hoe het maken van een hoekpuntbuffer eruit kan zien in code.
// 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;
Verwante onderwerpen