Simples Quadrat mit DX9 rendern, Crash bei DrawIndexedPrimitive
-
Hallo!
Ich habe D3D richtig initialisiert und bekomme mit folgendem Code bei DrawIndexedPrimitive einen Crash:Initialisation:
dwIndicies = new WORD[36]; v = new TVertex[8]; v[0].position.x = 0.0f; v[0].position.y = 0.0f; v[0].position.z = 0.0f; v[1].position.x = 0.0f; v[1].position.y = 1.0f; v[1].position.z = 0.0f; v[2].position.x = 0.0f; v[2].position.y = 0.0f; v[2].position.z = 1.0f; v[3].position.x = 0.0f; v[3].position.y = 1.0f; v[3].position.z = 1.0f; v[4].position.x = 1.0f; v[4].position.y = 0.0f; v[4].position.z = 0.0f; v[5].position.x = 1.0f; v[5].position.y = 1.0f; v[5].position.z = 0.0f; v[6].position.x = 1.0f; v[6].position.y = 0.0f; v[6].position.z = 1.0f; v[7].position.x = 1.0f; v[7].position.y = 1.0f; v[7].position.z = 1.0f; dwIndicies[0] = 0; dwIndicies[1] = 1; dwIndicies[2] = 3; dwIndicies[3] = 0; dwIndicies[4] = 2; dwIndicies[5] = 3; dwIndicies[6] = 2; dwIndicies[7] = 3; dwIndicies[8] = 7; dwIndicies[9] = 2; dwIndicies[10] = 6; dwIndicies[11] = 7; dwIndicies[12] = 4; dwIndicies[13] = 5; dwIndicies[14] = 6; dwIndicies[15] = 4; dwIndicies[16] = 6; dwIndicies[17] = 7; dwIndicies[18] = 0; dwIndicies[19] = 1; dwIndicies[20] = 5; dwIndicies[21] = 0; dwIndicies[22] = 2; dwIndicies[23] = 5; dwIndicies[24] = 1; dwIndicies[25] = 3; dwIndicies[26] = 7; dwIndicies[27] = 1; dwIndicies[28] = 5; dwIndicies[29] = 7; dwIndicies[30] = 0; dwIndicies[31] = 2; dwIndicies[32] = 6; dwIndicies[33] = 0; dwIndicies[34] = 4; dwIndicies[35] = 6; bValidModel = TRUE; dwNumMaterials = 1; if(dd_obj->lpD3DDevice->CreateVertexBuffer( 8*sizeof(TVertex), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &D3D_VertexBuffer, 0) != D3D_OK) MessageBox(0, "fehl0r", 0, 0); if(D3D_VertexBuffer->Lock( 0, 8*sizeof(TVertex), (void**)&pVertex, 0 ) != D3D_OK) MessageBox(0, "fehl0r", 0, 0); memcpy( pVertex, v, 8*sizeof(TVertex) ); if(D3D_VertexBuffer->Unlock() != D3D_OK) MessageBox(0, "fehl0r", 0, 0); if(dd_obj->lpD3DDevice->CreateIndexBuffer(36*sizeof(WORD), 0, D3DFMT_INDEX16, D3DPOOL_MANAGED, &D3D_IndexBuffer, 0) != D3D_OK) MessageBox(0, "fehl0r", 0, 0); if(D3D_IndexBuffer->Lock(0, 36*sizeof(WORD), (void**)&pIndex, 0) != D3D_OK) MessageBox(0, "fehl0r", 0, 0); memcpy(pIndex, dwIndicies, 36*sizeof(WORD)); if(D3D_IndexBuffer->Unlock() != D3D_OK) MessageBox(0, "fehl0r", 0, 0); if(dd_obj->lpD3DDevice->SetStreamSource( 0, D3D_VertexBuffer, sizeof(TVertex), 0) != D3D_OK)//VTriangle.D3D_VertexBuffer, sizeof(TVertex) ); MessageBox(0, "fehl0r", 0, 0); if(dd_obj->lpD3DDevice->SetFVF( D3DFVF_CUSTOMVERTEX ) != D3D_OK) MessageBox(0, "fehl0r", 0, 0); if(dd_obj->lpD3DDevice->SetIndices(D3D_IndexBuffer) != D3D_OK) MessageBox(0, "fehl0r", 0, 0);
Ich bekomme keinen "fehl0r" :D....
dann beim Rendern:dd_obj->lpD3DDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); dd_obj->lpD3DDevice->SetStreamSource( 0, D3D_VertexBuffer, sizeof(TVertex), 0); dd_obj->lpD3DDevice->SetIndices(D3D_IndexBuffer); dd_obj->lpD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 36, 0, 12);
Zusatz:
struct TVertex { D3DXVECTOR3 position; // Ortsvektor des Vertex float nx, ny, nz; //Lighting Normal float tu, tv; }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)
Ich hoffe ihr könnt mir helfen.
Danke,
Gruß,
Compiler
-
Bitte lesen. Danke.
Bye, TGGC (Reden wie die Großen)
-
Hi,
konnte das Problem leider noch nicht beheben :(. Kannst du mir nicht einen kleinen Tipp geben?
Compiler
-
Fehler schreibt sich ohne O.
Bye, TGGC \-/
-
das ist ja auch ne 0 (null).
Sag mir doch bitte wo der Fehler liegt, der Funktionsaufruf, indem der erste Fehler gemacht wird, würde mir schon reichen.
-
SetStreamSource
hier hab ich die letzten beiden Parameter vertauscht, meintest du das? Leider immernoch der gleiche Crash....grml/EDIT
Hatte das ja zweimal drin, thx 4 Hilfe zur Selbsthilfe
-
Dafür bin ich doch da.
Bye, TGGC \-/