Bonjour à tous,
J'ai un soucis avec mon programme. Quand j'appel drawIndexed, j'ai un accès mémoire illégal.
D'après ce que j'ai compris, ça viendrait de ma manière d'initialiser les buffers qui n'est pas bonne.
Voilà le code que j'utilise pour initialiser les buffers (un cube):
A cet endroit, tout à l'air correct, d'où mon incompréhension. Il est possible que mon erreur vienne de l'utilisation du shader, mais j'aurais déjà voulu savori si l'erreur pouvait venir d'ici..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 //------------------------------------------------------------- void MeshData::buildD3DBuffer(MeshData& _data) { ID3D11Device& d3dDevice = SE_RENDER_MANAGER()->getDevice(); //Build the vertex buffer D3D11_BUFFER_DESC bDesc; D3D11_SUBRESOURCE_DATA initData; bDesc.Usage = D3D11_USAGE_IMMUTABLE; bDesc.ByteWidth = sizeof(Vertex) * _data.m_vertices.size(); bDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; bDesc.CPUAccessFlags = 0; bDesc.MiscFlags = 0; bDesc.StructureByteStride = 0; initData.pSysMem = &_data.m_vertices[0]; HR(d3dDevice.CreateBuffer(&bDesc, &initData, &_data.m_VertexBuffer)); //Build the index buffer ZeroMemory(&bDesc, sizeof(D3D11_BUFFER_DESC)); ZeroMemory(&initData, sizeof(D3D11_SUBRESOURCE_DATA)); bDesc.Usage = D3D11_USAGE_IMMUTABLE; bDesc.ByteWidth = sizeof(unsigned) * _data.m_indices.size(); bDesc.BindFlags = D3D11_BIND_INDEX_BUFFER; bDesc.CPUAccessFlags = 0; bDesc.MiscFlags = 0; bDesc.StructureByteStride = 0; initData.pSysMem = &_data.m_indices[0]; HR(d3dDevice.CreateBuffer(&bDesc, &initData, &_data.m_IndexBuffer)); }
Pour info, voilà le code qui dessine:
J'ai donc besoin de vous pour me dire ce qui vous choque dans ma manière de faire ou me conseiller sur une méthode permettant de trouver d'où proviens l'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 void RenderManager::drawNode(Node* _node) { if (!_node ) return; Log::d("RENDERMANAGER") << "Rendering " << _node->getName(); if (!m_currentCamera ) return; if ( _node->isDrawable() ) { XMMATRIX globalTransform = _node->getTransformationMatrix(); MeshData* data = _node->getMeshData(); unsigned int stride = sizeof(Vertex); unsigned int offset = 0; //Set shader (TEST) Shader* sh = SE_SHADER_MANAGER()->getShader(L"Data/fx/color.fx"); assert(sh); m_d3dImmediateContext->IASetInputLayout(sh->getInputLayout()); m_d3dImmediateContext->IASetVertexBuffers(0, 1, &data->m_VertexBuffer, &stride, &offset); m_d3dImmediateContext->IASetIndexBuffer(data->m_IndexBuffer, DXGI_FORMAT_R32_UINT, 0); D3DX11_TECHNIQUE_DESC techDesc; HR(sh->getTechnique()->GetDesc(&techDesc)); for(UINT p = 0; p < techDesc.Passes; ++p) { HR(sh->getTechnique()->GetPassByIndex(p)->Apply(0, m_d3dImmediateContext)); m_d3dImmediateContext->DrawIndexed(data->m_indices.size()-1, 0, 0); } } if ( _node->isTranscient()) { for (unsigned i = 0; i < _node->getNumChild(); ++i) { drawNode(_node->getChild(i)); } } }
Merci d'avance.
Seeme
Partager