Dann wär ja auch das geklärt
Obwohl die Inititalisierung jetzt doch sehr einfach sein müsste, krieg ich es trotzem nicht hin
Ich bekomm immer nen Runtime Fehler wegen der nicht initialisierten Variable D3DD, die die IDirect3DDevice Schnittstelle darstellt.
Hier mein Code
InitDirect.hpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#pragma once
#include "d3d9.h"
struct TempParams
{
int VideoModeWidth;
int VideoModeHeight;
int VIdeoRefreshRate;
};
void InitD3DDevice (PDIRECT3D9 D3D, TempParams* Temp, HWND FocusWindow, PDIRECT3DDEVICE9 D3DD);
void SetDirect3DParams (PDIRECT3D9 D3D, TempParams* Temp);
D3DMULTISAMPLE_TYPE GetHightestMultiSampling (PDIRECT3D9 D3D, DWORD* QualityLevel,
D3DFORMAT SurfaceFormat = D3DFMT_X8R8G8B8, BOOL Windowed = false);
|
Hier InitDirect3D.cpp
|
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
42
|
#include "Init Direct3D.hpp"
void InitD3DDevice (PDIRECT3D9 D3D, TempParams* Temp, HWND FocusWindow, PDIRECT3DDEVICE9 D3DD)
{
D3DPRESENT_PARAMETERS PresentParams;
DWORD MultiSamplingQuality = 0;
PresentParams.BackBufferWidth = Temp->VideoModeWidth;
PresentParams.BackBufferHeight = Temp->VideoModeHeight;
PresentParams.BackBufferFormat = D3DFMT_X8R8G8B8;
PresentParams.BackBufferCount = 1;
PresentParams.MultiSampleType = GetHightestMultiSampling (D3D, &MultiSamplingQuality);
PresentParams.MultiSampleQuality = MultiSamplingQuality;
PresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
PresentParams.hDeviceWindow = FocusWindow;
PresentParams.Windowed = false;
PresentParams.EnableAutoDepthStencil = true;
PresentParams.AutoDepthStencilFormat = D3DFMT_D24S8;
PresentParams.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL;
PresentParams.FullScreen_RefreshRateInHz = Temp->VIdeoRefreshRate;
PresentParams.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
D3D->CreateDevice (D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL, FocusWindow,
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&PresentParams, &D3DD);
}
void SetDirect3DParams (PDIRECT3D9 D3D, TempParams* Temp)
{
D3DDISPLAYMODE* CurrentMode = new D3DDISPLAYMODE;
D3D->GetAdapterDisplayMode (D3DADAPTER_DEFAULT, CurrentMode);
Temp->VideoModeWidth = CurrentMode->Width;
Temp->VideoModeHeight = CurrentMode->Height;
Temp->VIdeoRefreshRate = CurrentMode->RefreshRate;
delete CurrentMode;
CurrentMode = 0;
}
|
Die lange Implementierung von GetHightestMultiSampling schreib ich mal nicht mit rein
Hier noch main.cpp
|
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
|
#include "GameWindow.hpp"
#include "Init Direct3D.hpp"
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, char* CmdLine, int CmdShow)
{
PDIRECT3D9 D3D = Direct3DCreate9 (D3D_SDK_VERSION);
PDIRECT3DDEVICE9 D3DD;
TempParams* Temp = new TempParams;
SetDirect3DParams (D3D, Temp);
GameWindow GameWin;
GameWin.Create (L"Game", 0, Temp->VideoModeWidth, Temp->VideoModeHeight);
InitD3DDevice (D3D, Temp, GameWin.GetHwnd (), D3DD);
ShowWindow (GameWin.GetHwnd (), CmdShow);
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0) )
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
delete Temp;
Temp = 0;
D3D->Release ();
D3DD->Release ();
}
|
Ich habe mir den Beispiel Code angesehen und dort wird der Zeiger g_pD3DDevice auch nicht initialisiert.
Was mache ich hier also falsch?
Debugger spuckt nichts aus, mit dem ich was anfangen könnte.