mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 19:11:55 +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
|
@ -13,11 +13,12 @@
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
{
|
||||
|
||||
IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -40,12 +41,11 @@ DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
|
||||
|
||||
{
|
||||
IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
|
|
@ -12,12 +12,11 @@
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
|
||||
|
||||
{
|
||||
IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -28,12 +27,12 @@ DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
EXPORTS
|
||||
;AcquireDDThreadLock
|
||||
;CompleteCreateSysmemSurface
|
||||
AcquireDDThreadLock@0
|
||||
D3DParseUnknownCommand@8
|
||||
ReleaseDDThreadLock@0
|
||||
|
||||
;CompleteCreateSysmemSurface
|
||||
;DDGetAttachedSurfaceLcl
|
||||
;DDInternalLock
|
||||
;DDInternalUnlock
|
||||
|
@ -19,4 +21,4 @@ DirectDrawEnumerateW@8
|
|||
;GetOLEThunkData
|
||||
;GetSurfaceFromDC
|
||||
;RegisterSpecialCase
|
||||
;ReleaseDDThreadLock
|
||||
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface;
|
||||
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -28,11 +28,10 @@ DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface;
|
||||
ULONG ref=0;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "rosdraw.h"
|
||||
#include "../rosdraw.h"
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -15,12 +15,13 @@
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
{
|
||||
|
||||
IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface;
|
||||
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -31,12 +32,12 @@ DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||
|
@ -83,12 +84,11 @@ DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface;
|
||||
|
||||
ULONG ref=0;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -99,12 +99,12 @@ DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
ref = InterlockedDecrement( (PLONG) &This->ref);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "rosdraw.h"
|
||||
#include "d3dhal.h"
|
||||
|
||||
CRITICAL_SECTION ddcs;
|
||||
|
||||
// This function is exported by the dll
|
||||
HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
|
||||
|
@ -34,6 +35,13 @@ DirectDrawCreate (LPGUID lpGUID,
|
|||
LPDIRECTDRAW* lplpDD,
|
||||
LPUNKNOWN pUnkOuter)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
|
||||
{
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
/* check see if pUnkOuter is null or not */
|
||||
if (pUnkOuter)
|
||||
{
|
||||
|
@ -55,7 +63,14 @@ DirectDrawCreateEx(LPGUID lpGUID,
|
|||
LPVOID* lplpDD,
|
||||
REFIID id,
|
||||
LPUNKNOWN pUnkOuter)
|
||||
{
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (IsBadWritePtr( lplpDD, sizeof( LPVOID )) )
|
||||
{
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
/* check see if pUnkOuter is null or not */
|
||||
if (pUnkOuter)
|
||||
{
|
||||
|
@ -202,5 +217,44 @@ D3DParseUnknownCommand( LPVOID lpCmd,
|
|||
return retCode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
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,17 +13,17 @@
|
|||
* Status ok
|
||||
*/
|
||||
|
||||
#include "rosdraw.h"
|
||||
#include "../rosdraw.h"
|
||||
|
||||
HRESULT
|
||||
WINAPI
|
||||
Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
|
||||
REFIID id,
|
||||
LPVOID *obj)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (IsEqualGUID(&IID_IDirectDraw7, id))
|
||||
{
|
||||
|
@ -57,10 +57,10 @@ Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface,
|
|||
ULONG
|
||||
WINAPI
|
||||
Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -82,10 +82,10 @@ Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
|
|||
ULONG
|
||||
WINAPI
|
||||
Main_DirectDraw_Release (LPDIRECTDRAW7 iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
@ -139,12 +139,14 @@ Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface,
|
|||
LPDIRECTDRAWCLIPPER *ppClipper,
|
||||
IUnknown *pUnkOuter)
|
||||
{
|
||||
IDirectDrawClipperImpl* That;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (pUnkOuter!=NULL)
|
||||
return CLASS_E_NOAGGREGATION;
|
||||
|
||||
IDirectDrawClipperImpl* That;
|
||||
|
||||
That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
|
||||
|
||||
if (That == NULL)
|
||||
|
@ -278,7 +280,7 @@ HRESULT internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl*
|
|||
HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
|
||||
LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
DxSurf *surf;
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
@ -286,6 +288,8 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
|||
DEVMODE DevMode;
|
||||
LONG extra_surfaces = 0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (pUnkOuter!=NULL)
|
||||
{
|
||||
return CLASS_E_NOAGGREGATION;
|
||||
|
@ -548,7 +552,10 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
|||
}
|
||||
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
|
||||
{
|
||||
return internal_CreateNewSurface( This, That);
|
||||
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
|
||||
DDHAL_CREATESURFACEDATA mDdCreateSurface;
|
||||
|
||||
return internal_CreateNewSurface( This, That);
|
||||
|
||||
memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
|
||||
memcpy(&That->Surf->mddsdOverlay, pDDSD, 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.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount;
|
||||
|
||||
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
|
||||
|
||||
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
|
||||
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
|
||||
|
@ -608,7 +615,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
|
|||
That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0];
|
||||
|
||||
|
||||
DDHAL_CREATESURFACEDATA mDdCreateSurface;
|
||||
|
||||
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
|
||||
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
|
||||
mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
|
||||
|
@ -755,148 +762,148 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla
|
|||
|
||||
DX_STUB_DD_OK;
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
DDSURFACEDESC2 desc_callback;
|
||||
DEVMODE DevMode;
|
||||
int iMode=0;
|
||||
|
||||
RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
|
||||
|
||||
desc_callback.dwSize = sizeof(DDSURFACEDESC2);
|
||||
// IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
// DDSURFACEDESC2 desc_callback;
|
||||
// DEVMODE DevMode;
|
||||
// int iMode=0;
|
||||
//
|
||||
//RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
|
||||
//
|
||||
// desc_callback.dwSize = sizeof(DDSURFACEDESC2);
|
||||
|
||||
desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
|
||||
// desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;
|
||||
|
||||
if (dwFlags & DDEDM_REFRESHRATES)
|
||||
{
|
||||
desc_callback.dwFlags |= DDSD_REFRESHRATE;
|
||||
desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
|
||||
}
|
||||
// if (dwFlags & DDEDM_REFRESHRATES)
|
||||
// {
|
||||
// desc_callback.dwFlags |= DDSD_REFRESHRATE;
|
||||
// desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
|
||||
// }
|
||||
|
||||
|
||||
/* FIXME check if the mode are suppretd before sending it back */
|
||||
//
|
||||
// /* FIXME check if the mode are suppretd before sending it back */
|
||||
|
||||
memset(&DevMode,0,sizeof(DEVMODE));
|
||||
DevMode.dmSize = (WORD)sizeof(DEVMODE);
|
||||
DevMode.dmDriverExtra = 0;
|
||||
//memset(&DevMode,0,sizeof(DEVMODE));
|
||||
//DevMode.dmSize = (WORD)sizeof(DEVMODE);
|
||||
//DevMode.dmDriverExtra = 0;
|
||||
|
||||
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;
|
||||
}
|
||||
// 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;
|
||||
// }
|
||||
|
||||
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 */
|
||||
}
|
||||
// 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 */
|
||||
// }
|
||||
|
||||
/* above same as wine */
|
||||
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;
|
||||
// /* above same as wine */
|
||||
// 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 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 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 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;
|
||||
// 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++;
|
||||
}
|
||||
// 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;
|
||||
// return DD_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -945,11 +952,13 @@ HRESULT WINAPI
|
|||
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
||||
LPDDCAPS pHELCaps)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
DDSCAPS2 ddscaps = {0};
|
||||
DWORD status = DD_FALSE;
|
||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (pDriverCaps != NULL)
|
||||
{
|
||||
|
@ -984,11 +993,11 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
|
|||
* Status ok
|
||||
*/
|
||||
HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (pDDSD == NULL)
|
||||
{
|
||||
return DD_FALSE;
|
||||
|
@ -1048,11 +1057,11 @@ Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface,
|
|||
*/
|
||||
HRESULT WINAPI
|
||||
Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (freq == NULL)
|
||||
{
|
||||
return DD_FALSE;
|
||||
|
@ -1068,11 +1077,10 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
|
|||
*/
|
||||
HRESULT WINAPI
|
||||
Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
|
||||
{
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
*lpdwScanLine = 0;
|
||||
|
||||
|
@ -1111,10 +1119,10 @@ Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status)
|
|||
HRESULT
|
||||
WINAPI
|
||||
Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface==NULL)
|
||||
{
|
||||
|
@ -1158,10 +1166,12 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl
|
|||
// for now we always asume it is the active dirver that should be use.
|
||||
// - allow more Flags
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
// check the parameters
|
||||
if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd == hwnd))
|
||||
|
@ -1217,7 +1227,7 @@ HRESULT WINAPI
|
|||
Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
|
||||
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
BOOL dummy = TRUE;
|
||||
|
@ -1226,6 +1236,8 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig
|
|||
int Width=0;
|
||||
int Height=0;
|
||||
int BPP=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
/* FIXME check the refresrate if it same if it not same do the mode switch */
|
||||
if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) &&
|
||||
|
@ -1289,9 +1301,9 @@ HRESULT WINAPI
|
|||
Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
|
||||
HANDLE h)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL)
|
||||
{
|
||||
|
@ -1317,11 +1329,12 @@ Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
|
|||
HRESULT WINAPI
|
||||
Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
|
||||
LPDWORD total, LPDWORD free)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
{
|
||||
DDHAL_GETAVAILDRIVERMEMORYDATA mem;
|
||||
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
/* Only Hal version exists acodring msdn */
|
||||
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
|
||||
|
@ -60,10 +60,10 @@ Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,
|
|||
|
||||
HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
||||
LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)
|
||||
|
@ -77,11 +77,11 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
|
|||
|
||||
HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
||||
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (event != NULL)
|
||||
{
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
@ -96,11 +96,11 @@ HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
|
|||
}
|
||||
|
||||
HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK)
|
||||
{
|
||||
return Hal_DDrawSurface_Unlock( iface, pRect);
|
||||
|
@ -113,12 +113,12 @@ HRESULT WINAPI
|
|||
Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
|
||||
LPDIRECTDRAWSURFACE7 pAttach)
|
||||
{
|
||||
DWORD ret;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
DWORD ret;
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (pAttach==NULL)
|
||||
{
|
||||
return DDERR_CANNOTATTACHSURFACE;
|
||||
|
@ -273,11 +273,11 @@ Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface,
|
|||
HRESULT WINAPI
|
||||
Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface,
|
||||
LPDIRECTDRAWSURFACE7 override, DWORD dwFlags)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
||||
{
|
||||
return Hal_DDrawSurface_Flip(iface, override, dwFlags);
|
||||
|
@ -362,11 +362,11 @@ Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface,
|
|||
|
||||
HRESULT WINAPI
|
||||
Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP)
|
||||
{
|
||||
return Hal_DDrawSurface_GetBltStatus( iface, dwFlags);
|
||||
|
@ -377,11 +377,11 @@ Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
|||
|
||||
HRESULT WINAPI
|
||||
Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface == NULL)
|
||||
{
|
||||
return DDERR_INVALIDOBJECT;
|
||||
|
@ -421,10 +421,10 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
|
|||
HRESULT WINAPI
|
||||
Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawSurfaceImpl* This;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface == NULL)
|
||||
{
|
||||
return DDERR_INVALIDOBJECT;
|
||||
|
@ -527,10 +527,9 @@ HRESULT WINAPI
|
|||
Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
|
||||
LPDDSURFACEDESC2 pDDSD)
|
||||
{
|
||||
DWORD dwSize;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
DWORD dwSize;
|
||||
IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
dwSize = pDDSD->dwSize;
|
||||
|
||||
|
@ -584,10 +583,9 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags)
|
|||
|
||||
HRESULT WINAPI
|
||||
Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawSurfaceImpl* This;
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This;
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface == NULL)
|
||||
{
|
||||
|
@ -625,11 +623,11 @@ Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface,
|
|||
HRESULT WINAPI
|
||||
Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface,
|
||||
DWORD dwFlags, LPDDCOLORKEY pCKey)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY)
|
||||
{
|
||||
return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
|
||||
|
@ -693,11 +691,11 @@ Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface,
|
|||
HRESULT WINAPI
|
||||
Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY)
|
||||
{
|
||||
return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags);
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
{
|
||||
IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
|
||||
|
@ -39,12 +39,11 @@ DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface)
|
|||
|
||||
ULONG WINAPI
|
||||
DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface)
|
||||
{
|
||||
DX_WINDBG_trace();
|
||||
|
||||
IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
|
||||
|
||||
{
|
||||
IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface;
|
||||
ULONG ref=0;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
if (iface!=NULL)
|
||||
{
|
||||
|
|
|
@ -25,6 +25,9 @@ VOID Cleanup(LPDIRECTDRAW7 iface);
|
|||
/******** Main Object ********/
|
||||
|
||||
/* Public interface */
|
||||
VOID WINAPI AcquireDDThreadLock();
|
||||
VOID WINAPI ReleaseDDThreadLock();
|
||||
|
||||
HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj);
|
||||
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface);
|
||||
ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface);
|
||||
|
@ -317,6 +320,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
|||
/*********** Macros ***********/
|
||||
|
||||
#define DX_STUB \
|
||||
{ \
|
||||
static BOOL firstcall = TRUE; \
|
||||
if (firstcall) \
|
||||
{ \
|
||||
|
@ -325,9 +329,11 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
|||
OutputDebugStringA(buffer); \
|
||||
firstcall = FALSE; \
|
||||
} \
|
||||
} \
|
||||
return DDERR_UNSUPPORTED;
|
||||
|
||||
#define DX_STUB_DD_OK \
|
||||
{ \
|
||||
static BOOL firstcall = TRUE; \
|
||||
if (firstcall) \
|
||||
{ \
|
||||
|
@ -336,6 +342,7 @@ DWORD CALLBACK HelDdFlipToGDISurface(LPDDHAL_FLIPTOGDISURFACEDATA lpFlipToGDISu
|
|||
OutputDebugStringA(buffer); \
|
||||
firstcall = FALSE; \
|
||||
} \
|
||||
} \
|
||||
return DD_OK;
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "rosdraw.h"
|
||||
#include "../rosdraw.h"
|
||||
|
||||
|
||||
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].wRefreshRate = (WORD)devmode.dmDisplayFrequency;
|
||||
|
||||
This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL);
|
||||
if ( This->devicetype <3 )
|
||||
{
|
||||
/* Create HDC for default, hal and hel driver */
|
||||
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)
|
||||
{
|
||||
|
@ -222,6 +234,7 @@ HRESULT WINAPI
|
|||
StartDirectDrawHal(LPDIRECTDRAW* iface)
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
|
||||
DDHAL_GETDRIVERINFODATA DriverInfo;
|
||||
|
||||
/* HAL Startup process */
|
||||
BOOL newmode = FALSE;
|
||||
|
@ -354,7 +367,7 @@ StartDirectDrawHal(LPDIRECTDRAW* iface)
|
|||
|
||||
//DeleteDC(This->hdc);
|
||||
|
||||
DDHAL_GETDRIVERINFODATA DriverInfo;
|
||||
|
||||
memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA));
|
||||
DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA);
|
||||
DriverInfo.dwContext = This->mDDrawGlobal.hDD;
|
||||
|
@ -425,15 +438,22 @@ Create_DirectDraw (LPGUID pGUID,
|
|||
REFIID id,
|
||||
BOOL ex)
|
||||
{
|
||||
IDirectDrawImpl* This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
||||
IDirectDrawImpl* This;
|
||||
|
||||
DX_WINDBG_trace();
|
||||
|
||||
//AcquireDDThreadLock();
|
||||
|
||||
This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));
|
||||
|
||||
|
||||
if (This == NULL)
|
||||
{
|
||||
ReleaseDDThreadLock();
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
|
||||
ZeroMemory(This,sizeof(IDirectDrawImpl));
|
||||
|
||||
This->lpVtbl = &DirectDraw7_Vtable;
|
||||
|
@ -442,29 +462,39 @@ Create_DirectDraw (LPGUID pGUID,
|
|||
This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable;
|
||||
|
||||
*pIface = (LPDIRECTDRAW)This;
|
||||
|
||||
This->devicetype = 0;
|
||||
|
||||
if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY)
|
||||
|
||||
if (pGUID == 0)
|
||||
{
|
||||
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)
|
||||
{
|
||||
ReleaseDDThreadLock();
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK);
|
||||
{
|
||||
//ReleaseDDThreadLock();
|
||||
return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
|
||||
}
|
||||
|
||||
//ReleaseDDThreadLock();
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "winedraw.h"
|
||||
#include "../winedraw.h"
|
||||
|
||||
|
||||
static HRESULT WINAPI
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include "winedraw.h"
|
||||
#include "../winedraw.h"
|
||||
|
||||
#define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
|
||||
IDirectDrawSurface3, \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue