mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:42:56 +00:00
1. Fixed some vc warings and fault
2. Implement AcquireDDThreadLock, ReleaseDDThreadLock (does not working as it should yet) 3. Start making ddraw thread safe 4. Fixed some mirors bugs svn path=/trunk/; revision=24690
This commit is contained in:
parent
556dd785d7
commit
5b6863ed96
16 changed files with 361 additions and 260 deletions
|
@ -14,11 +14,12 @@
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
|
DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface;
|
IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||||
|
@ -41,12 +42,11 @@ DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
|
DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
|
IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedIncrement( (PLONG) &This->ref);
|
ref = InterlockedIncrement( (PLONG) &This->ref);
|
||||||
|
|
|
@ -13,12 +13,11 @@
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
|
DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
|
IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedIncrement( (PLONG) &This->ref);
|
ref = InterlockedIncrement( (PLONG) &This->ref);
|
||||||
|
@ -29,11 +28,11 @@ DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
|
DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
|
IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
EXPORTS
|
EXPORTS
|
||||||
;AcquireDDThreadLock
|
AcquireDDThreadLock@0
|
||||||
;CompleteCreateSysmemSurface
|
|
||||||
D3DParseUnknownCommand@8
|
D3DParseUnknownCommand@8
|
||||||
|
ReleaseDDThreadLock@0
|
||||||
|
|
||||||
|
;CompleteCreateSysmemSurface
|
||||||
;DDGetAttachedSurfaceLcl
|
;DDGetAttachedSurfaceLcl
|
||||||
;DDInternalLock
|
;DDInternalLock
|
||||||
;DDInternalUnlock
|
;DDInternalUnlock
|
||||||
|
@ -19,4 +21,4 @@ DirectDrawEnumerateW@8
|
||||||
;GetOLEThunkData
|
;GetOLEThunkData
|
||||||
;GetSurfaceFromDC
|
;GetSurfaceFromDC
|
||||||
;RegisterSpecialCase
|
;RegisterSpecialCase
|
||||||
;ReleaseDDThreadLock
|
|
||||||
|
|
|
@ -13,12 +13,12 @@
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
|
DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface;
|
IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedIncrement( (PLONG) &This->ref);
|
ref = InterlockedIncrement( (PLONG) &This->ref);
|
||||||
|
@ -29,10 +29,9 @@ DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
|
DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
|
IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rosdraw.h"
|
#include "../rosdraw.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,12 +16,13 @@
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
|
DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
|
IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedIncrement( (PLONG) &This->ref);
|
ref = InterlockedIncrement( (PLONG) &This->ref);
|
||||||
|
@ -32,11 +33,11 @@ DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
|
DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
|
IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||||
|
@ -84,11 +85,10 @@ DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
|
DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
|
IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
|
@ -100,11 +100,11 @@ DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
|
DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
|
IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "rosdraw.h"
|
#include "rosdraw.h"
|
||||||
#include "d3dhal.h"
|
#include "d3dhal.h"
|
||||||
|
|
||||||
|
CRITICAL_SECTION ddcs;
|
||||||
|
|
||||||
// This function is exported by the dll
|
// This function is exported by the dll
|
||||||
HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
|
HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
|
||||||
|
@ -34,6 +35,13 @@ DirectDrawCreate (LPGUID lpGUID,
|
||||||
LPDIRECTDRAW* lplpDD,
|
LPDIRECTDRAW* lplpDD,
|
||||||
LPUNKNOWN pUnkOuter)
|
LPUNKNOWN pUnkOuter)
|
||||||
{
|
{
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
|
||||||
|
{
|
||||||
|
return DDERR_INVALIDPARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
/* check see if pUnkOuter is null or not */
|
/* check see if pUnkOuter is null or not */
|
||||||
if (pUnkOuter)
|
if (pUnkOuter)
|
||||||
{
|
{
|
||||||
|
@ -56,6 +64,13 @@ DirectDrawCreateEx(LPGUID lpGUID,
|
||||||
REFIID id,
|
REFIID id,
|
||||||
LPUNKNOWN pUnkOuter)
|
LPUNKNOWN pUnkOuter)
|
||||||
{
|
{
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
|
||||||
|
{
|
||||||
|
return DDERR_INVALIDPARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
/* check see if pUnkOuter is null or not */
|
/* check see if pUnkOuter is null or not */
|
||||||
if (pUnkOuter)
|
if (pUnkOuter)
|
||||||
{
|
{
|
||||||
|
@ -203,4 +218,43 @@ D3DParseUnknownCommand( LPVOID lpCmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WINAPI
|
||||||
|
AcquireDDThreadLock()
|
||||||
|
{
|
||||||
|
EnterCriticalSection(&ddcs);
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
WINAPI
|
||||||
|
ReleaseDDThreadLock()
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&ddcs);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL APIENTRY
|
||||||
|
DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
|
||||||
|
{
|
||||||
|
BOOL retStatus;
|
||||||
|
switch(ul_reason_for_call)
|
||||||
|
{
|
||||||
|
case DLL_PROCESS_DETACH:
|
||||||
|
DeleteCriticalSection( &ddcs );
|
||||||
|
retStatus = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DLL_PROCESS_ATTACH:
|
||||||
|
DisableThreadLibraryCalls( hModule );
|
||||||
|
InitializeCriticalSection( &ddcs );
|
||||||
|
EnterCriticalSection( &ddcs );
|
||||||
|
LeaveCriticalSection( &ddcs );
|
||||||
|
retStatus = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
retStatus = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return retStatus;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
* Status ok
|
* Status ok
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rosdraw.h"
|
#include "../rosdraw.h"
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
|
@ -21,10 +21,10 @@ Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
|
||||||
REFIID id,
|
REFIID id,
|
||||||
LPVOID *obj)
|
LPVOID *obj)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (IsEqualGUID(&IID_IDirectDraw7, id))
|
if (IsEqualGUID(&IID_IDirectDraw7, id))
|
||||||
{
|
{
|
||||||
*obj = &This->lpVtbl;
|
*obj = &This->lpVtbl;
|
||||||
|
@ -58,10 +58,10 @@ ULONG
|
||||||
WINAPI
|
WINAPI
|
||||||
Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
|
Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
This->mDDrawLocal.dwLocalRefCnt++;
|
This->mDDrawLocal.dwLocalRefCnt++;
|
||||||
|
@ -83,10 +83,10 @@ ULONG
|
||||||
WINAPI
|
WINAPI
|
||||||
Main_DirectDraw_Release (LPDIRECTDRAW7 iface)
|
Main_DirectDraw_Release (LPDIRECTDRAW7 iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
This->mDDrawLocal.dwLocalRefCnt--;
|
This->mDDrawLocal.dwLocalRefCnt--;
|
||||||
|
@ -139,12 +139,14 @@ Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface,
|
||||||
LPDIRECTDRAWCLIPPER *ppClipper,
|
LPDIRECTDRAWCLIPPER *ppClipper,
|
||||||
IUnknown *pUnkOuter)
|
IUnknown *pUnkOuter)
|
||||||
{
|
{
|
||||||
|
IDirectDrawClipperImpl* That;
|
||||||
|
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pUnkOuter!=NULL)
|
if (pUnkOuter!=NULL)
|
||||||
return CLASS_E_NOAGGREGATION;
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
|
||||||
IDirectDrawClipperImpl* That;
|
|
||||||
That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
|
That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
|
||||||
|
|
||||||
if (That == NULL)
|
if (That == NULL)
|
||||||
|
@ -278,7 +280,7 @@ HRESULT internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl*
|
||||||
HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
|
HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
|
||||||
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
|
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
DxSurf *surf;
|
DxSurf *surf;
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
@ -286,6 +288,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||||
DEVMODE DevMode;
|
DEVMODE DevMode;
|
||||||
LONG extra_surfaces = 0;
|
LONG extra_surfaces = 0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pUnkOuter!=NULL)
|
if (pUnkOuter!=NULL)
|
||||||
{
|
{
|
||||||
return CLASS_E_NOAGGREGATION;
|
return CLASS_E_NOAGGREGATION;
|
||||||
|
@ -548,6 +552,9 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||||
}
|
}
|
||||||
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
|
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
|
||||||
{
|
{
|
||||||
|
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
|
||||||
|
DDHAL_CREATESURFACEDATA mDdCreateSurface;
|
||||||
|
|
||||||
return internal_CreateNewSurface( This, That);
|
return internal_CreateNewSurface( This, That);
|
||||||
|
|
||||||
memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
|
memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
|
||||||
|
@ -564,7 +571,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||||
That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = pDDSD->ddpfPixelFormat.dwFlags;
|
That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = pDDSD->ddpfPixelFormat.dwFlags;
|
||||||
That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount;
|
That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount;
|
||||||
|
|
||||||
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
|
|
||||||
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
|
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||||
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
|
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
|
||||||
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
|
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
|
||||||
|
@ -608,7 +615,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
||||||
That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0];
|
That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0];
|
||||||
|
|
||||||
|
|
||||||
DDHAL_CREATESURFACEDATA mDdCreateSurface;
|
|
||||||
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
|
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||||
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
|
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
|
||||||
mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
|
mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
|
||||||
|
@ -755,148 +762,148 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla
|
||||||
|
|
||||||
DX_STUB_DD_OK;
|
DX_STUB_DD_OK;
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
// IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
DDSURFACEDESC2 desc_callback;
|
// DDSURFACEDESC2 desc_callback;
|
||||||
DEVMODE DevMode;
|
// DEVMODE DevMode;
|
||||||
int iMode=0;
|
// int iMode=0;
|
||||||
|
//
|
||||||
|
//RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
|
||||||
|
//
|
||||||
|
// desc_callback.dwSize = sizeof(DDSURFACEDESC2);
|
||||||
|
|
||||||
RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
|
// desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
|
||||||
|
|
||||||
desc_callback.dwSize = sizeof(DDSURFACEDESC2);
|
// if (dwFlags & DDEDM_REFRESHRATES)
|
||||||
|
// {
|
||||||
|
// desc_callback.dwFlags |= DDSD_REFRESHRATE;
|
||||||
|
// desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
|
||||||
|
// }
|
||||||
|
|
||||||
desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
|
//
|
||||||
|
// /* FIXME check if the mode are suppretd before sending it back */
|
||||||
|
|
||||||
if (dwFlags & DDEDM_REFRESHRATES)
|
//memset(&DevMode,0,sizeof(DEVMODE));
|
||||||
{
|
//DevMode.dmSize = (WORD)sizeof(DEVMODE);
|
||||||
desc_callback.dwFlags |= DDSD_REFRESHRATE;
|
//DevMode.dmDriverExtra = 0;
|
||||||
desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
|
||||||
|
// {
|
||||||
|
//
|
||||||
|
// if (pDDSD)
|
||||||
|
// {
|
||||||
|
// if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
|
||||||
|
// continue;
|
||||||
|
// if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
|
||||||
|
// continue;
|
||||||
|
// if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
|
||||||
|
// (pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
|
||||||
|
// continue;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// desc_callback.dwHeight = DevMode.dmPelsHeight;
|
||||||
|
// desc_callback.dwWidth = DevMode.dmPelsWidth;
|
||||||
|
//
|
||||||
|
// if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
|
||||||
|
// {
|
||||||
|
// desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
|
||||||
|
// }
|
||||||
|
|
||||||
/* FIXME check if the mode are suppretd before sending it back */
|
// if (desc_callback.dwRefreshRate == 0)
|
||||||
|
// {
|
||||||
|
// DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
|
||||||
|
// desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
|
||||||
|
// }
|
||||||
|
|
||||||
memset(&DevMode,0,sizeof(DEVMODE));
|
// /* above same as wine */
|
||||||
DevMode.dmSize = (WORD)sizeof(DEVMODE);
|
// if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
|
||||||
DevMode.dmDriverExtra = 0;
|
// {
|
||||||
|
// switch(DevMode.dmBitsPerPel)
|
||||||
|
// {
|
||||||
|
// case 8:
|
||||||
|
// desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
|
||||||
|
// /* FIXME right value */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
|
||||||
|
// break;
|
||||||
|
|
||||||
while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
|
// case 15:
|
||||||
{
|
// desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
|
||||||
|
// /* FIXME right value */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
|
||||||
|
// break;
|
||||||
|
|
||||||
if (pDDSD)
|
// case 16:
|
||||||
{
|
// desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
|
// desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
continue;
|
// desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
||||||
if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
|
// desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
|
||||||
continue;
|
// /* FIXME right value */
|
||||||
if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
|
// desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
|
||||||
(pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
|
// desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
|
||||||
continue;
|
// desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
|
||||||
}
|
// break;
|
||||||
|
|
||||||
desc_callback.dwHeight = DevMode.dmPelsHeight;
|
// case 24:
|
||||||
desc_callback.dwWidth = DevMode.dmPelsWidth;
|
// desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
|
||||||
|
// /* FIXME right value */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
|
||||||
|
// break;
|
||||||
|
|
||||||
if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
|
// case 32:
|
||||||
{
|
// desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
|
// desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
}
|
// desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
|
||||||
|
// /* FIXME right value */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
|
||||||
|
// desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
|
||||||
|
// break;
|
||||||
|
|
||||||
if (desc_callback.dwRefreshRate == 0)
|
// default:
|
||||||
{
|
// break;
|
||||||
DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
|
// }
|
||||||
desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
|
// desc_callback.ddsCaps.dwCaps = 0;
|
||||||
}
|
// if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)
|
||||||
|
// {
|
||||||
|
// /* FIXME srt DDCS Caps flag */
|
||||||
|
// desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (DevMode.dmBitsPerPel==15)
|
||||||
|
// {
|
||||||
|
// desc_callback.lPitch = DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel / 8);
|
||||||
|
// desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
|
||||||
|
// {
|
||||||
|
// return DD_OK;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// iMode++;
|
||||||
|
// }
|
||||||
|
|
||||||
/* above same as wine */
|
// return DD_OK;
|
||||||
if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
|
|
||||||
{
|
|
||||||
switch(DevMode.dmBitsPerPel)
|
|
||||||
{
|
|
||||||
case 8:
|
|
||||||
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
||||||
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
|
||||||
desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
|
||||||
desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
|
|
||||||
/* FIXME right value */
|
|
||||||
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 15:
|
|
||||||
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
||||||
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
|
||||||
desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
|
||||||
desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
|
|
||||||
/* FIXME right value */
|
|
||||||
desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 16:
|
|
||||||
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
||||||
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
|
||||||
desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
|
||||||
desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
|
|
||||||
/* FIXME right value */
|
|
||||||
desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 24:
|
|
||||||
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
||||||
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
|
||||||
desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
|
||||||
desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
|
|
||||||
/* FIXME right value */
|
|
||||||
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 32:
|
|
||||||
desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
||||||
desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
|
|
||||||
desc_callback.ddpfPixelFormat.dwFourCC = 0;
|
|
||||||
desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
|
|
||||||
/* FIXME right value */
|
|
||||||
desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
|
|
||||||
desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
desc_callback.ddsCaps.dwCaps = 0;
|
|
||||||
if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8)
|
|
||||||
{
|
|
||||||
/* FIXME srt DDCS Caps flag */
|
|
||||||
desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (DevMode.dmBitsPerPel==15)
|
|
||||||
{
|
|
||||||
desc_callback.lPitch = DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel / 8);
|
|
||||||
desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
|
|
||||||
{
|
|
||||||
return DD_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
iMode++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return DD_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -945,12 +952,14 @@ HRESULT WINAPI
|
||||||
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
||||||
LPDDCAPS pHELCaps)
|
LPDDCAPS pHELCaps)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
DDSCAPS2 ddscaps = {0};
|
DDSCAPS2 ddscaps = {0};
|
||||||
DWORD status = DD_FALSE;
|
DWORD status = DD_FALSE;
|
||||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pDriverCaps != NULL)
|
if (pDriverCaps != NULL)
|
||||||
{
|
{
|
||||||
Main_DirectDraw_GetAvailableVidMem(iface,
|
Main_DirectDraw_GetAvailableVidMem(iface,
|
||||||
|
@ -985,10 +994,10 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pDDSD == NULL)
|
if (pDDSD == NULL)
|
||||||
{
|
{
|
||||||
return DD_FALSE;
|
return DD_FALSE;
|
||||||
|
@ -1049,10 +1058,10 @@ Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
|
Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (freq == NULL)
|
if (freq == NULL)
|
||||||
{
|
{
|
||||||
return DD_FALSE;
|
return DD_FALSE;
|
||||||
|
@ -1069,11 +1078,10 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
|
Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
|
||||||
{
|
{
|
||||||
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
|
||||||
|
|
||||||
*lpdwScanLine = 0;
|
*lpdwScanLine = 0;
|
||||||
|
|
||||||
if (This->mDdGetScanLine.GetScanLine == NULL)
|
if (This->mDdGetScanLine.GetScanLine == NULL)
|
||||||
|
@ -1112,10 +1120,10 @@ HRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
|
Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface==NULL)
|
if (iface==NULL)
|
||||||
{
|
{
|
||||||
return DDERR_NOTINITIALIZED;
|
return DDERR_NOTINITIALIZED;
|
||||||
|
@ -1158,11 +1166,13 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl
|
||||||
// for now we always asume it is the active dirver that should be use.
|
// for now we always asume it is the active dirver that should be use.
|
||||||
// - allow more Flags
|
// - allow more Flags
|
||||||
|
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode;
|
DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
// check the parameters
|
// check the parameters
|
||||||
if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd == hwnd))
|
if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd == hwnd))
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
|
@ -1217,7 +1227,7 @@ HRESULT WINAPI
|
||||||
Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
|
Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
|
||||||
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
|
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
BOOL dummy = TRUE;
|
BOOL dummy = TRUE;
|
||||||
|
@ -1227,6 +1237,8 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
|
||||||
int Height=0;
|
int Height=0;
|
||||||
int BPP=0;
|
int BPP=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
/* FIXME check the refresrate if it same if it not same do the mode switch */
|
/* FIXME check the refresrate if it same if it not same do the mode switch */
|
||||||
if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) &&
|
if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) &&
|
||||||
(This->mDDrawGlobal.vmiData.dwDisplayWidth == dwWidth) &&
|
(This->mDDrawGlobal.vmiData.dwDisplayWidth == dwWidth) &&
|
||||||
|
@ -1289,9 +1301,9 @@ HRESULT WINAPI
|
||||||
Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
|
Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
|
||||||
HANDLE h)
|
HANDLE h)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL)
|
if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL)
|
||||||
{
|
{
|
||||||
|
@ -1318,11 +1330,12 @@ HRESULT WINAPI
|
||||||
Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
|
Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
|
||||||
LPDWORD total, LPDWORD free)
|
LPDWORD total, LPDWORD free)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
DDHAL_GETAVAILDRIVERMEMORYDATA mem;
|
DDHAL_GETAVAILDRIVERMEMORYDATA mem;
|
||||||
|
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
/* Only Hal version exists acodring msdn */
|
/* Only Hal version exists acodring msdn */
|
||||||
if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY))
|
if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY))
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rosdraw.h"
|
#include "../rosdraw.h"
|
||||||
|
|
||||||
|
|
||||||
/* FIXME adding hal and hel stub
|
/* FIXME adding hal and hel stub
|
||||||
|
@ -61,10 +61,10 @@ Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
|
||||||
HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||||
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)
|
||||||
{
|
{
|
||||||
|
@ -78,10 +78,10 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||||
HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
||||||
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
|
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (event != NULL)
|
if (event != NULL)
|
||||||
{
|
{
|
||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
|
@ -97,10 +97,10 @@ HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
||||||
|
|
||||||
HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
|
HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
|
||||||
{
|
{
|
||||||
return Hal_DDrawSurface_Unlock( iface, pRect);
|
return Hal_DDrawSurface_Unlock( iface, pRect);
|
||||||
|
@ -114,11 +114,11 @@ Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
|
||||||
LPDIRECTDRAWSURFACE7 pAttach)
|
LPDIRECTDRAWSURFACE7 pAttach)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach;
|
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (pAttach==NULL)
|
if (pAttach==NULL)
|
||||||
{
|
{
|
||||||
return DDERR_CANNOTATTACHSURFACE;
|
return DDERR_CANNOTATTACHSURFACE;
|
||||||
|
@ -274,10 +274,10 @@ HRESULT WINAPI
|
||||||
Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
|
Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
|
||||||
LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
|
LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
||||||
{
|
{
|
||||||
return Hal_DDrawSurface_Flip(iface, override, dwFlags);
|
return Hal_DDrawSurface_Flip(iface, override, dwFlags);
|
||||||
|
@ -363,10 +363,10 @@ Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
||||||
{
|
{
|
||||||
return Hal_DDrawSurface_GetBltStatus( iface, dwFlags);
|
return Hal_DDrawSurface_GetBltStatus( iface, dwFlags);
|
||||||
|
@ -378,10 +378,10 @@ Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
|
Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This;
|
IDirectDrawSurfaceImpl* This;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface == NULL)
|
if (iface == NULL)
|
||||||
{
|
{
|
||||||
return DDERR_INVALIDOBJECT;
|
return DDERR_INVALIDOBJECT;
|
||||||
|
@ -421,10 +421,10 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
|
Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This;
|
IDirectDrawSurfaceImpl* This;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface == NULL)
|
if (iface == NULL)
|
||||||
{
|
{
|
||||||
return DDERR_INVALIDOBJECT;
|
return DDERR_INVALIDOBJECT;
|
||||||
|
@ -528,9 +528,8 @@ Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
|
||||||
LPDDSURFACEDESC2 pDDSD)
|
LPDDSURFACEDESC2 pDDSD)
|
||||||
{
|
{
|
||||||
DWORD dwSize;
|
DWORD dwSize;
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
|
IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
dwSize = pDDSD->dwSize;
|
dwSize = pDDSD->dwSize;
|
||||||
|
|
||||||
|
@ -585,9 +584,8 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
||||||
HRESULT WINAPI
|
HRESULT WINAPI
|
||||||
Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
|
Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This;
|
IDirectDrawSurfaceImpl* This;
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface == NULL)
|
if (iface == NULL)
|
||||||
{
|
{
|
||||||
|
@ -626,10 +624,10 @@ HRESULT WINAPI
|
||||||
Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
|
Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
|
||||||
DWORD dwFlags, LPDDCOLORKEY pCKey)
|
DWORD dwFlags, LPDDCOLORKEY pCKey)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
|
||||||
{
|
{
|
||||||
return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
|
return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
|
||||||
|
@ -694,10 +692,10 @@ HRESULT WINAPI
|
||||||
Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
|
Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
|
||||||
DWORD dwFlags)
|
DWORD dwFlags)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
|
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
|
||||||
{
|
{
|
||||||
return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags);
|
return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags);
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
|
DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
|
IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
|
ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
|
||||||
|
@ -40,12 +40,11 @@ DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
|
||||||
ULONG WINAPI
|
ULONG WINAPI
|
||||||
DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface)
|
DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface)
|
||||||
{
|
{
|
||||||
DX_WINDBG_trace();
|
|
||||||
|
|
||||||
IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
|
IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
|
||||||
|
|
||||||
ULONG ref=0;
|
ULONG ref=0;
|
||||||
|
|
||||||
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
if (iface!=NULL)
|
if (iface!=NULL)
|
||||||
{
|
{
|
||||||
ref = InterlockedIncrement( (PLONG) &This->DDPalette.dwRefCnt);
|
ref = InterlockedIncrement( (PLONG) &This->DDPalette.dwRefCnt);
|
||||||
|
|
|
@ -25,6 +25,9 @@ VOID Cleanup(LPDIRECTDRAW7 iface);
|
||||||
/******** Main Object ********/
|
/******** Main Object ********/
|
||||||
|
|
||||||
/* Public interface */
|
/* Public interface */
|
||||||
|
VOID WINAPI AcquireDDThreadLock();
|
||||||
|
VOID WINAPI ReleaseDDThreadLock();
|
||||||
|
|
||||||
HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj);
|
HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj);
|
||||||
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface);
|
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface);
|
||||||
ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface);
|
ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface);
|
||||||
|
@ -317,6 +320,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
||||||
/*********** Macros ***********/
|
/*********** Macros ***********/
|
||||||
|
|
||||||
#define DX_STUB \
|
#define DX_STUB \
|
||||||
|
{ \
|
||||||
static BOOL firstcall = TRUE; \
|
static BOOL firstcall = TRUE; \
|
||||||
if (firstcall) \
|
if (firstcall) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -325,9 +329,11 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
||||||
OutputDebugStringA(buffer); \
|
OutputDebugStringA(buffer); \
|
||||||
firstcall = FALSE; \
|
firstcall = FALSE; \
|
||||||
} \
|
} \
|
||||||
|
} \
|
||||||
return DDERR_UNSUPPORTED;
|
return DDERR_UNSUPPORTED;
|
||||||
|
|
||||||
#define DX_STUB_DD_OK \
|
#define DX_STUB_DD_OK \
|
||||||
|
{ \
|
||||||
static BOOL firstcall = TRUE; \
|
static BOOL firstcall = TRUE; \
|
||||||
if (firstcall) \
|
if (firstcall) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -336,6 +342,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
||||||
OutputDebugStringA(buffer); \
|
OutputDebugStringA(buffer); \
|
||||||
firstcall = FALSE; \
|
firstcall = FALSE; \
|
||||||
} \
|
} \
|
||||||
|
} \
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rosdraw.h"
|
#include "../rosdraw.h"
|
||||||
|
|
||||||
|
|
||||||
extern DDPIXELFORMAT pixelformats[];
|
extern DDPIXELFORMAT pixelformats[];
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rosdraw.h"
|
#include "../rosdraw.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,19 @@ StartDirectDraw(LPDIRECTDRAW* iface)
|
||||||
This->mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8;
|
This->mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8;
|
||||||
This->mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency;
|
This->mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency;
|
||||||
|
|
||||||
|
if ( This->devicetype <3 )
|
||||||
|
{
|
||||||
|
/* Create HDC for default, hal and hel driver */
|
||||||
This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
|
This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* FIXME : need getting driver from the GUID that have been pass in from
|
||||||
|
the register. we do not support that yet
|
||||||
|
*/
|
||||||
|
This->hdc = NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (This->hdc == NULL)
|
if (This->hdc == NULL)
|
||||||
{
|
{
|
||||||
|
@ -222,6 +234,7 @@ HRESULT WINAPI
|
||||||
StartDirectDrawHal(LPDIRECTDRAW* iface)
|
StartDirectDrawHal(LPDIRECTDRAW* iface)
|
||||||
{
|
{
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||||
|
DDHAL_GETDRIVERINFODATA DriverInfo;
|
||||||
|
|
||||||
/* HAL Startup process */
|
/* HAL Startup process */
|
||||||
BOOL newmode = FALSE;
|
BOOL newmode = FALSE;
|
||||||
|
@ -354,7 +367,7 @@ StartDirectDrawHal(LPDIRECTDRAW* iface)
|
||||||
|
|
||||||
//DeleteDC(This->hdc);
|
//DeleteDC(This->hdc);
|
||||||
|
|
||||||
DDHAL_GETDRIVERINFODATA DriverInfo;
|
|
||||||
memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
|
memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
|
||||||
DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
|
DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
|
||||||
DriverInfo.dwContext = This->mDDrawGlobal.hDD;
|
DriverInfo.dwContext = This->mDDrawGlobal.hDD;
|
||||||
|
@ -425,15 +438,22 @@ Create_DirectDraw (LPGUID pGUID,
|
||||||
REFIID id,
|
REFIID id,
|
||||||
BOOL ex)
|
BOOL ex)
|
||||||
{
|
{
|
||||||
IDirectDrawImpl* This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
IDirectDrawImpl* This;
|
||||||
|
|
||||||
DX_WINDBG_trace();
|
DX_WINDBG_trace();
|
||||||
|
|
||||||
|
//AcquireDDThreadLock();
|
||||||
|
|
||||||
|
This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
||||||
|
|
||||||
|
|
||||||
if (This == NULL)
|
if (This == NULL)
|
||||||
{
|
{
|
||||||
|
ReleaseDDThreadLock();
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ZeroMemory(This,sizeof(IDirectDrawImpl));
|
ZeroMemory(This,sizeof(IDirectDrawImpl));
|
||||||
|
|
||||||
This->lpVtbl = &DirectDraw7_Vtable;
|
This->lpVtbl = &DirectDraw7_Vtable;
|
||||||
|
@ -443,28 +463,38 @@ Create_DirectDraw (LPGUID pGUID,
|
||||||
|
|
||||||
*pIface = (LPDIRECTDRAW)This;
|
*pIface = (LPDIRECTDRAW)This;
|
||||||
|
|
||||||
This->devicetype = 0;
|
if (pGUID == 0)
|
||||||
|
|
||||||
if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
|
|
||||||
{
|
{
|
||||||
This->devicetype = 1; /* hal only */
|
This->devicetype = 0; /* both hal and hel default driver "DISPLAY" */
|
||||||
|
}
|
||||||
|
else if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
|
||||||
|
{
|
||||||
|
This->devicetype = 1; /* hal only default driver "DISPLAY" */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
|
else if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY)
|
||||||
{
|
{
|
||||||
This->devicetype = 2; /* hel only */
|
This->devicetype = 2; /* hel only default driver "DISPLAY" */
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
This->devicetype = 3; /* Read from the register which driver it should be */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
|
if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
|
||||||
{
|
{
|
||||||
|
ReleaseDDThreadLock();
|
||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK);
|
if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK);
|
||||||
{
|
{
|
||||||
|
//ReleaseDDThreadLock();
|
||||||
return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
|
return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//ReleaseDDThreadLock();
|
||||||
return DDERR_INVALIDPARAMS;
|
return DDERR_INVALIDPARAMS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "winedraw.h"
|
#include "../winedraw.h"
|
||||||
|
|
||||||
|
|
||||||
static HRESULT WINAPI
|
static HRESULT WINAPI
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "winedraw.h"
|
#include "../winedraw.h"
|
||||||
|
|
||||||
#define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
|
#define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
|
||||||
IDirectDrawSurface3, \
|
IDirectDrawSurface3, \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue