[asm]d3d9->CreateDevice

11/19/2011 20:50 Tyrar#1
hab da ein problem mit dieser funktion (IDirect3D9->CreateDevice)..
die funktion returned mit einem wert > 0, wenn ich aber g_pD3D9Device anschaue steht 0 drin :|

Code:
push g_pD3D9Device
push ecx
push 20h
push eax
push 1
push 0
thiscall g_pD3D9, CreateDevice
test eax, eax
je _tc_initdx_failed
mov eax, [g_pD3D9Device] ; <- hier
test eax, eax ; <- hier
je _tc_initdx_failed ; <- hier
d3dpp fülle ich so:
Code:
mov ecx, d3dpp
xor eax, eax
mov [ecx+D3DPRESENT_PARAMETERS.MultiSampleType], eax
mov [ecx+D3DPRESENT_PARAMETERS.MultiSampleQuality], eax
mov [ecx+D3DPRESENT_PARAMETERS.Flags], eax
mov [ecx+D3DPRESENT_PARAMETERS.FullScreen_RefreshRateInHz], eax
mov [ecx+D3DPRESENT_PARAMETERS.PresentationInterval], eax
mov [ecx+D3DPRESENT_PARAMETERS.EnableAutoDepthStencil], eax
mov [ecx+D3DPRESENT_PARAMETERS.BackBufferFormat], eax
mov ax, 1
mov [ecx+D3DPRESENT_PARAMETERS.BackBufferCount], eax
mov [ecx+D3DPRESENT_PARAMETERS.SwapEffect], eax
mov [ecx+D3DPRESENT_PARAMETERS.Windowed], eax
mov eax, 800
mov [ecx+D3DPRESENT_PARAMETERS.BackBufferWidth], eax
mov eax, 600
mov [ecx+D3DPRESENT_PARAMETERS.BackBufferHeight], eax
mov eax, hWnd
mov [ecx+D3DPRESENT_PARAMETERS.hDeviceWindow], eax
mein thiscall macro stellt auch kein problem dar:
Code:
%macro thiscall 2
	mov eax, [%1]
	push eax
	mov ecx, [eax]
	mov eax, [ecx+%2]
	call eax
%endmacro
nur hab ich leider kp wo der fehler liegt :|
11/20/2011 18:32 Tyrar#2
Quote:
Originally Posted by link View Post
D3D_OK ist wie STATUS_SUCCESS gleich 0, heißt CreateDevice liefert bei dir einen Fehler zurück.

Es wäre vllt. auch übersichtlicher, Konstanten statt Literalen zu benutzen (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, D3DCREATE_SOFTWARE_VERTEXPROCESSING, ...)

Außerdem kannst du BackBufferWidth und Height auf 0 lassen, sodass automatisch die Größe der Client Area des Fensters genommen wird.

Btw. wieso setzt du bei D3DPRESENT_PARAMETERS mit eax alles auf 0?
Du könntest doch auch RtlZeroMemory benutzen und dann die Werte, die ungleich 0 sind, setzen bzw. wenn die Variable in einer Sektion und nicht auf dem Stack ist, wird's doch sowieso mit 0 initialisiert.
ok das war schonmal ne gute hilfe... jetz muss ich nurnoch rausfinden warum es failed :| (D3DERR_INVALIDCALL)

push g_pD3DDevice9
push d3dpp
push 20h ; <- D3DCREATE_SOFTWARE_VERTEXPROCESSING
push 0 ; <- habs schon geändert (window handle)
push 1 ; <- D3DDEVTYPE_HAL
push 0 ; <- D3DADAPTER_DEFAULT