Liebe Leser.
Ich habe seit neuestem wieder begonnen, gelegentlich wieder etwas in D3D11 zu Programmieren. Jedoch habe ich ein Problem,
das ich bisher leider nicht lösen konnte. Ich Programmieren damit keine Spiele sondern einfach nach Lust und Laune etwas auf den Bildschirm.
Die Hardware nahe Programmierung mit DX11 macht mir irgendwie viel mehr Spas als das entwickeln eines Spiels mit eine Engine. Mich interessiert eher wie Engiens funktionieren. naja
Was D3D Angeht benutzte ich kleines eigenes Framework. Es ist nicht groß und hilft nur bei groben dingen von DX11 wie bsw.
Initialisierung/Effekte/Geometrie Pufferung (Vertex/Indices). Mehr nicht.
Nun zum Problem.
Ich habe das Problem, dass ich die Anwendung lange zeit nur im Debug modus entwickelt habe. Als ich dann neulich releasen wollte klappt es nicht.
Es kommt folgender Fehler
Ausnahme (erste Chance) bei 0x00DF1AC7 in Anwendung.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000
Der Fehler zeigt auf die Codestelle, wo SwapChain.Pressent aufgerufen wird. Er tritt nur im release modus auf.
Ich benutzte Visual Studio 2012.
Hier ist die Renderfunktion. (Ort des Fehlers)
|
C-/C++-Quelltext
|
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
|
void Render()
{
TF_Direct3D11 &D3D = TF_Direct3D11::instance();
float F[3] = {0.5f, 0.5f, 0.3f};
D3D.Clear_All(F);
D3D->IASetInputLayout(mInputLayout);
D3D->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
RotateModel();
XMMATRIX WORLD = XMLoadFloat4x4(&World);
XMMATRIX VIEW = XMLoadFloat4x4(&View);
XMMATRIX PRJ = XMLoadFloat4x4(&Prj);
XMMATRIX M = WORLD*VIEW*PRJ;
mfxWorldViewProj->SetMatrix(reinterpret_cast<float*>(&M));
D3DX11_TECHNIQUE_DESC techDesc;
mp_Effect->GetTech(1)->GetDesc( &techDesc );
for(UINT p = 0; p < techDesc.Passes; ++p)
{
mp_Effect->Pass(1 , 1);
mp_Model->Render();
}
D3D.GetSwapChain()->GetSwapChain()->Present(0,0); // FEHLERSTELLE **************************************************
}
|