Hallo,
ich arbeite zur Zeit auf meinem Arbeitslaptop der keine besonders gute Grafikkarte besitzt. Dabei ist mir aufgefallen das es zu einem "D3DERR_INVALIDCALL" Fehler kommt,(bei dem aufruf von IDirect3D9::CreateDevice) verursacht dadurch das die Flags falsch sind.
Zur errinerung diese werden wie folgt bestimmt/gesetzt:
|
Quellcode
|
1
2
3
4
5
6
|
config->Direct3D.dwFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
config->Direct3D.dwFlags |= D3DCREATE_MULTITHREADED;
if(!(Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT))
{
config->Direct3D.dwFlags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
|
Da ich das Buch nicht zur Hand hab weiß ich nicht warum "D3DCREATE_HARDWARE_VERTEXPROCESSING" immer gesetzt wird.(?) Dies verursacht nämlich bei mir das Problem. Also hab ich das ganze wiefolgt verändert:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
if((Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT))
{
config->Direct3D.dwFlags = D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
else
{
config->Direct3D.dwFlags = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
}
|
Zugegeben ich bin kein DirectX experte, deshlb würde ich gern wissen warum es anders im Buch gemacht wird und den hintergrund. Oder ist es sehr wichtig das die hardware das Vertexprocessing übernimmt
mal abgesehen von geschwindigkeitsvorteilen)