X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Flib%2Fddraw%2Fmain%2Fddraw_main.c;h=49e84a32b6096211585e30ed4b0a55f9cbec76df;hp=3a8b4b87a5f0c739d66b5d58735e9a5709e640eb;hb=36704a0989819df82d9d87926b2bd62a8f735f55;hpb=fadf0415610e07d6d3c71dbc477e36d26793b3d3 diff --git a/reactos/lib/ddraw/main/ddraw_main.c b/reactos/lib/ddraw/main/ddraw_main.c index 3a8b4b87a5f..49e84a32b60 100644 --- a/reactos/lib/ddraw/main/ddraw_main.c +++ b/reactos/lib/ddraw/main/ddraw_main.c @@ -16,6 +16,8 @@ HRESULT WINAPI Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID) IDirectDrawImpl* This = (IDirectDrawImpl*)iface; HRESULT ret; + + // this if it is not called by DirectDrawCreate if(FALSE) return DDERR_ALREADYINITIALIZED; @@ -36,7 +38,8 @@ HRESULT WINAPI Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID) // ... then overwrite with hal if((ret = Hel_DirectDraw_Initialize (iface)) != DD_OK) return ret; - + + return DD_OK; } @@ -48,7 +51,6 @@ HRESULT WINAPI Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hw // - allow more Flags IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - HRESULT ret; // check the parameters if (This->cooperative_level == cooplevel && This->window == hwnd) @@ -72,20 +74,21 @@ HRESULT WINAPI Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hw This->cooperative_level = cooplevel; + if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE) + { + return Hal_DirectDraw_SetCooperativeLevel (iface); + } - if((ret = Hal_DirectDraw_SetCooperativeLevel (iface)) != DD_OK) - return ret; - - if((ret = Hel_DirectDraw_SetCooperativeLevel (iface)) != DD_OK) - return ret; + return Hel_DirectDraw_SetCooperativeLevel(iface); - return DD_OK; } HRESULT WINAPI Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) { DWORD ret; + + /* FIXME implement hal setMode */ if((ret = Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags)) == DD_OK) { @@ -163,18 +166,30 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE return DDERR_UNSUPPORTED; // the nasty com stuff + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + IDirectDrawSurfaceImpl* That; That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawSurfaceImpl)); - + if (That == NULL) return E_OUTOFMEMORY; ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl)); - + That->lpVtbl = &DirectDrawSurface7_Vtable; That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable; - That->ref = 1; + + This->DirectDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(DDRAWI_DDRAWSURFACE_INT)); + + That->owner = (IDirectDrawImpl *)This; + + That->owner->DirectDrawGlobal.dsList->dwIntRefCnt =1; + + /* we alwasy set to use the DirectDrawSurface7_Vtable as internel */ + That->owner->DirectDrawGlobal.dsList->lpVtbl = (PVOID) &DirectDrawSurface7_Vtable; + *ppSurf = (LPDIRECTDRAWSURFACE7)That;