mirror of
https://github.com/reactos/reactos.git
synced 2024-11-03 13:25:57 +00:00
288 lines
7.7 KiB
C
288 lines
7.7 KiB
C
#pragma once
|
|
|
|
/********* Includes *********/
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
#include <ddraw.h>
|
|
#include <ddrawi.h>
|
|
#include <d3dhal.h>
|
|
#include <ddrawgdi.h>
|
|
#include <pseh/pseh.h>
|
|
|
|
#include <pseh/pseh2.h>
|
|
|
|
#include "Ddraw/ddraw.h"
|
|
#include "Surface/surface.h"
|
|
#include "Clipper/clipper.h"
|
|
|
|
#include "resource.h"
|
|
|
|
/* DirectDraw startup code only internal use */
|
|
extern DDRAWI_DIRECTDRAW_GBL ddgbl;
|
|
extern DDRAWI_DDRAWSURFACE_GBL ddSurfGbl;
|
|
extern WCHAR classname[128];
|
|
extern WNDCLASSW wnd_class;
|
|
extern CRITICAL_SECTION ddcs;
|
|
extern IDirectDraw7Vtbl DirectDraw7_Vtable;
|
|
extern IDirectDraw4Vtbl DirectDraw4_Vtable;
|
|
extern IDirectDraw2Vtbl DirectDraw2_Vtable;
|
|
extern IDirectDrawVtbl DirectDraw_Vtable;
|
|
|
|
|
|
extern IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable;
|
|
extern IDirectDrawSurface4Vtbl DirectDrawSurface4_Vtable;
|
|
extern IDirectDrawSurface3Vtbl DirectDrawSurface3_Vtable;
|
|
extern IDirectDrawSurface2Vtbl DirectDrawSurface2_Vtable;
|
|
extern IDirectDrawSurfaceVtbl DirectDrawSurface_Vtable;
|
|
extern const IDirectDrawPaletteVtbl DirectDrawPalette_Vtable;
|
|
extern IDirectDrawClipperVtbl DirectDrawClipper_Vtable;
|
|
extern IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable;
|
|
extern IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable;
|
|
extern IDirectDrawKernelVtbl DirectDrawKernel_Vtable;
|
|
extern IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable;
|
|
|
|
extern IDirect3DVtbl IDirect3D_Vtbl;
|
|
extern IDirect3D2Vtbl IDirect3D2_Vtbl;
|
|
extern IDirect3D3Vtbl IDirect3D3_Vtbl;
|
|
extern IDirect3D7Vtbl IDirect3D7_Vtbl;
|
|
|
|
/* Start up direct hal or hel
|
|
* iface = a pointer to the com object
|
|
* pGUID = guid hardware accelerations or software acceleration this can be NULL
|
|
* reenable = FALSE if we whant create a new directdraw com
|
|
* = TRUE if we really whant rebuild the whole com interface (not in use)
|
|
*/
|
|
|
|
HRESULT WINAPI
|
|
StartDirectDraw(
|
|
LPDIRECTDRAW iface,
|
|
LPGUID pGUID,
|
|
BOOL reenable);
|
|
|
|
/* iface = a pointer to the com object
|
|
* reenable = FALSE / TRUE rebuld dx hal interface, this is need if we doing a mode change
|
|
*/
|
|
|
|
HRESULT WINAPI
|
|
StartDirectDrawHal(
|
|
LPDIRECTDRAW iface,
|
|
BOOL reenable);
|
|
|
|
/* iface = a pointer to the com object
|
|
* reenable = FALSE / TRUE rebuld dx hel interface, this is need if we doing a mode change
|
|
*/
|
|
|
|
HRESULT WINAPI
|
|
StartDirectDrawHel(
|
|
LPDIRECTDRAW iface,
|
|
BOOL reenable);
|
|
|
|
HRESULT WINAPI
|
|
Create_DirectDraw (
|
|
LPGUID pGUID,
|
|
LPDIRECTDRAW* pIface,
|
|
REFIID id,
|
|
BOOL ex);
|
|
|
|
HRESULT WINAPI
|
|
ReCreateDirectDraw(LPDIRECTDRAW iface);
|
|
HRESULT
|
|
Internal_CreateSurface(
|
|
LPDDRAWI_DIRECTDRAW_INT pDDraw,
|
|
LPDDSURFACEDESC2 pDDSD,
|
|
LPDDRAWI_DDRAWSURFACE_INT *ppSurf,
|
|
IUnknown *pUnkOuter);
|
|
|
|
HRESULT
|
|
Internal_CreatePalette( LPDDRAWI_DIRECTDRAW_INT pDDraw, DWORD dwFlags,
|
|
LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter);
|
|
|
|
/* convert DDSURFACEDESC to DDSURFACEDESC2 */
|
|
void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src_pDesc);
|
|
|
|
/* DirectDraw Cleanup code only internal use */
|
|
VOID Cleanup(LPDDRAWI_DIRECTDRAW_INT iface);
|
|
|
|
/* own macro to alloc memory */
|
|
|
|
/*
|
|
#define DxHeapMemAlloc(m) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m)
|
|
#define DxHeapMemFree(p) HeapFree(GetProcessHeap(), 0, p); \
|
|
p = NULL;
|
|
*/
|
|
#define DxHeapMemAlloc(p, m) { \
|
|
p = malloc(m); \
|
|
if (p != NULL) \
|
|
{ \
|
|
ZeroMemory(p,m); \
|
|
} \
|
|
}
|
|
#define DxHeapMemFree(p) { \
|
|
free(p); \
|
|
p = NULL; \
|
|
}
|
|
|
|
/******** Main Object ********/
|
|
|
|
/* Public interface */
|
|
VOID WINAPI AcquireDDThreadLock(VOID);
|
|
VOID WINAPI ReleaseDDThreadLock(VOID);
|
|
|
|
ULONG WINAPI DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface);
|
|
HRESULT WINAPI DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags);
|
|
|
|
typedef struct DDRAWI_DDCOLORCONTROL_INT
|
|
{
|
|
LPVOID lpVtbl;
|
|
LPVOID lpLcl;
|
|
LPVOID lpLink;
|
|
DWORD dwIntRefCnt;
|
|
} DDRAWI_DDCOLORCONTROL_INT, *LPDDRAWI_DDCOLORCONTROL_INT;
|
|
|
|
typedef struct _DDRAWI_DDGAMMACONTROL_INT
|
|
{
|
|
LPVOID lpVtbl;
|
|
LPVOID lpLcl;
|
|
LPVOID lpLink;
|
|
DWORD dwIntRefCnt;
|
|
} DDRAWI_DDGAMMACONTROL_INT, *LPDDRAWI_DDGAMMACONTROL_INT;
|
|
|
|
typedef struct _DDRAWI_DDKERNEL_INT
|
|
{
|
|
LPVOID lpVtbl;
|
|
LPVOID lpLcl;
|
|
LPVOID lpLink;
|
|
DWORD dwIntRefCnt;
|
|
} DDRAWI_KERNEL_INT, *LPDDRAWI_KERNEL_INT;
|
|
|
|
typedef struct _DDRAWI_DDKERNELSURFACE_INT
|
|
{
|
|
LPVOID lpVtbl;
|
|
LPVOID lpLcl;
|
|
LPVOID lpLink;
|
|
DWORD dwIntRefCnt;
|
|
} _DDRAWI_DDKERNELSURFACE_INT, *LPDDRAWI_DDKERNELSURFACE_INT;
|
|
|
|
/* now to real info that are for private use and are our own */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/********* Prototypes **********/
|
|
VOID Hal_DirectDraw_Release (LPDIRECTDRAW7);
|
|
|
|
/* Setting for HEL should be move to ros special reg key ? */
|
|
|
|
/* setup how much graphic memory should hel be limit, set it now to 64MB */
|
|
#define HEL_GRAPHIC_MEMORY_MAX 67108864
|
|
|
|
/*********** Macros ***********/
|
|
|
|
/*
|
|
use this macro to close
|
|
down the debugger text complete
|
|
no debuging at all, it will
|
|
crash ms debugger in VS
|
|
*/
|
|
|
|
//#define DX_WINDBG_trace()
|
|
//#define DX_STUB
|
|
//#define DX_STUB_DD_OK return DD_OK;
|
|
//#define DX_STUB_str(x)
|
|
//#define DX_WINDBG_trace_res
|
|
|
|
|
|
/*
|
|
Use this macro if you want debug in visual studio or
|
|
if you have a program to look at the _INT struct from
|
|
ReactOS ddraw.dll or ms ddraw.dll, so you can see what
|
|
value ms are being setup.
|
|
|
|
This macro will create allot warnings and can not be help when you compile
|
|
*/
|
|
|
|
|
|
//#define DX_WINDBG_trace()
|
|
//#define DX_STUB
|
|
//#define DX_STUB_DD_OK return DD_OK;
|
|
//#define DX_STUB_str(x) printf("%s",x);
|
|
//#define DX_WINDBG_trace_res
|
|
|
|
/*
|
|
use this if want doing a trace from a program
|
|
like a game and ReactOS ddraw.dll in windows
|
|
so you can figout what going wrong and what
|
|
api are being call or if it hel or is it hal
|
|
|
|
This marco does not create warnings when you compile
|
|
*/
|
|
|
|
#define DX_STUB \
|
|
{ \
|
|
static BOOL firstcall = TRUE; \
|
|
if (firstcall) \
|
|
{ \
|
|
char buffer[1024]; \
|
|
sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
|
|
OutputDebugStringA(buffer); \
|
|
firstcall = FALSE; \
|
|
} \
|
|
} \
|
|
return DDERR_UNSUPPORTED;
|
|
|
|
|
|
|
|
#define DX_STUB_DD_OK \
|
|
{ \
|
|
static BOOL firstcall = TRUE; \
|
|
if (firstcall) \
|
|
{ \
|
|
char buffer[1024]; \
|
|
sprintf ( buffer, "Function %s is not implemented yet (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
|
|
OutputDebugStringA(buffer); \
|
|
firstcall = FALSE; \
|
|
} \
|
|
} \
|
|
return DD_OK;
|
|
|
|
|
|
#if 1
|
|
#define DX_STUB_str(x) \
|
|
{ \
|
|
char buffer[1024]; \
|
|
sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
|
|
OutputDebugStringA(buffer); \
|
|
}
|
|
|
|
|
|
#define DX_WINDBG_trace() \
|
|
static BOOL firstcallx = TRUE; \
|
|
if (firstcallx) \
|
|
{ \
|
|
char buffer[1024]; \
|
|
sprintf ( buffer, "Enter Function %s (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
|
|
OutputDebugStringA(buffer); \
|
|
firstcallx = TRUE; \
|
|
}
|
|
|
|
|
|
#define DX_WINDBG_trace_res(width,height,bpp, freq) \
|
|
static BOOL firstcallxx = TRUE; \
|
|
if (firstcallxx) \
|
|
{ \
|
|
char buffer[1024]; \
|
|
sprintf ( buffer, "Setmode have been req width=%ld, height=%ld bpp=%ld freq = %ld\n",width,height,bpp, freq); \
|
|
OutputDebugStringA(buffer); \
|
|
firstcallxx = TRUE; \
|
|
}
|
|
#else
|
|
#define DX_WINDBG_trace() //
|
|
#define DX_WINDBG_trace_res(width,height,bpp, freq) \\
|
|
|
|
#define DX_STUB_str(x) //
|
|
|
|
#endif
|