Hoi
Ich habe son kleines problem. ich arbeite mit der tbengine und will eine kleine klasse die ich gemacht habe (eine art tbmodell) rendern.
Compiliert wird alles, allerdings eine Fehlermeldung ausgegeben:
Unhandled exception in Testumgebung.exe: 0xC0000005: Access Violation.
Das ist der Code der Klasse (an der Stelle):
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
// Effekt laden
dwNumEffects = 1;
pEffects = (MapEffectChunk*)(tbMemAlloc(dwNumEffects * sizeof(MapEffectChunk)));
if(pEffects = NULL) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);
pEffects[0].dwNumTextures = 1;
|
der Pfeil geht an die Stelle:
|
C-/C++-Quelltext
|
1
|
pEffects[0].dwNumTextures = 1;
|
Im Debugfenster steht: [list] pEffects Value: 0x00000000[/list]Das ist ja schonmal komisch, weil es scheint als wäre kein speicherbereich freigegeben.
Noch komischer ist: Wenn ich testweise die Initialisierung überspringe, kommt der Fehler an anderer Stelle:
Hier der Code wie ich die Initialisierung der Klasse überspringe
|
C-/C++-Quelltext
|
1
2
3
4
|
//BspPart mit der Funktion TestInit intialisieren.
TestPart = new CBSPPart;
if(TestPart == NULL) TB_ERROR_OUT_OF_MEMORY(TB_ERROR);
//TestPart->TestInit("culling.fx");
|
Dann kommt der Fehler in der Renderfunktion:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
tbResult Render(float fNumSecsPassed)
{
HRESULT hResult;
float fAspect;
tbMatrix mCamera;
tbMatrix mProjection;
// Den Bildpuffer und den Z-Buffer leeren
if(FAILED(hResult = g_pD3DDevice->Clear(0,
NULL,
D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0, 0, 0),
1.0f,
=> 0)))
{
// Fehler beim Leeren!
TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
}
// Szene beginnen
g_pD3DDevice->BeginScene();
|
Hab den Pfeil angezeichnet an der Stelle wo ihn der Debugger setzt. Dann kommt wieder im Debugfenster:
[list]g_pD3DDevice Value: 0x00000000[/list]
hab ich was wichtiges vergessen? wundert mich weil der Fehler an beiden Stellen kommt.
D3D wird so initialisiert:
|
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
34
35
36
37
38
39
40
41
|
tbResult Result;
tbConfig g_Config;
int r;
// TriBase-Engine initialisieren
tbInit();
// Konfiguration abfragen
if(r = tbDoConfigDialog(&g_Config))
{
if(r == TB_CANCELED) return TB_OK;
else
{
// Fehler!
MessageBox(NULL, "Fehler im Konfigurationsdialog!", "Fehler",
MB_OK | MB_ICONEXCLAMATION);
return TB_ERROR;
}
}
// Direct3D initialisieren
if(tbDirect3D::Init(&g_Config,
"Beispielprogramm Nr. 1: tbDirect3D",
NULL,
LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1))))
{
// Fehler!
MessageBox(NULL, "Fehler bei der Direct3D-Initialisierung!", "Fehler",
MB_OK | MB_ICONEXCLAMATION);
ExitApplication();
return TB_ERROR;
}
// Den Texturmanager initialisieren
if(tbTextureManager::Init())
{
MessageBox(tbDirect3D::GetWindow(), "Fehler beim Initialisieren des Texturmanagers!",
"Fehler", MB_OK | MB_ICONEXCLAMATION);
ExitApplication();
return TB_ERROR;
}
|
Sollte doch reichen oder?
Hoffe mir kann jmd helfen, und das der Beitrag nich zu lang wird ,p