/* * Copyright (c) 2010 Toni Spets * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef MAIN_H #define MAIN_H #include #include "ddraw.h" #include #include struct IDirectDrawImpl; struct IDirectDrawImplVtbl; struct IDirectDrawSurfaceImpl; extern struct IDirectDrawImpl *ddraw; typedef struct IDirectDrawImpl { struct IDirectDrawImplVtbl *lpVtbl; ULONG Ref; DWORD width; DWORD height; DWORD bpp; BOOL windowed; BOOL border; BOOL boxing; BOOL windowed_init; DEVMODE mode; struct IDirectDrawSurfaceImpl *primary; char title[128]; HMODULE real_dll; /* real export from system32\ddraw.dll */ HRESULT WINAPI (*DirectDrawCreate)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*); CRITICAL_SECTION cs; struct { int maxfps; int width; int height; int bpp; int filter; HDC hDC; int *tex; HANDLE thread; BOOL run; HANDLE ev; HANDLE sem; DEVMODE mode; } render; HWND hWnd; LRESULT CALLBACK (*WndProc)(HWND, UINT, WPARAM, LPARAM); struct { float x; float y; } cursor; POINT center; struct { int width; int height; } cursorclip; BOOL locked; BOOL adjmouse; BOOL mhack; BOOL devmode; BOOL vsync; float sensitivity; BOOL vhack; DWORD WINAPI (*renderer)(void); } IDirectDrawImpl; typedef struct IDirectDrawImplVtbl IDirectDrawImplVtbl; struct IDirectDrawImplVtbl { HRESULT(__stdcall *QueryInterface) (IDirectDrawImpl *, const IID* const riid, LPVOID * ppvObj); ULONG(__stdcall *AddRef) (IDirectDrawImpl *); ULONG(__stdcall *Release) (IDirectDrawImpl *); HRESULT(__stdcall *Compact)(IDirectDrawImpl *); HRESULT(__stdcall *CreateClipper)(IDirectDrawImpl *, DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *); HRESULT(__stdcall *CreatePalette)(IDirectDrawImpl *, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); HRESULT(__stdcall *CreateSurface)(IDirectDrawImpl *, LPDDSURFACEDESC, LPDIRECTDRAWSURFACE *, IUnknown *); HRESULT(__stdcall *DuplicateSurface)( IDirectDrawImpl *, LPDIRECTDRAWSURFACE, LPDIRECTDRAWSURFACE *); HRESULT(__stdcall *EnumDisplayModes)( IDirectDrawImpl *, DWORD, LPDDSURFACEDESC, LPVOID, LPDDENUMMODESCALLBACK); HRESULT(__stdcall *EnumSurfaces)(IDirectDrawImpl *, DWORD, LPDDSURFACEDESC, LPVOID,LPDDENUMSURFACESCALLBACK); HRESULT(__stdcall *FlipToGDISurface)(IDirectDrawImpl *); HRESULT(__stdcall *GetCaps)(IDirectDrawImpl *, LPDDCAPS, LPDDCAPS); HRESULT(__stdcall *GetDisplayMode)(IDirectDrawImpl *, LPDDSURFACEDESC); HRESULT(__stdcall *GetFourCCCodes)(IDirectDrawImpl *, LPDWORD, LPDWORD); HRESULT(__stdcall *GetGDISurface)(IDirectDrawImpl *, LPDIRECTDRAWSURFACE *); HRESULT(__stdcall *GetMonitorFrequency)(IDirectDrawImpl *, LPDWORD); HRESULT(__stdcall *GetScanLine)(IDirectDrawImpl *, LPDWORD); HRESULT(__stdcall *GetVerticalBlankStatus)(IDirectDrawImpl *, LPBOOL); HRESULT(__stdcall *Initialize)(IDirectDrawImpl *, GUID *); HRESULT(__stdcall *RestoreDisplayMode)(IDirectDrawImpl *); HRESULT(__stdcall *SetCooperativeLevel)(IDirectDrawImpl *, HWND, DWORD); HRESULT(__stdcall *SetDisplayMode)(IDirectDrawImpl *, DWORD, DWORD,DWORD); HRESULT(__stdcall *WaitForVerticalBlank)(IDirectDrawImpl *, DWORD, HANDLE); }; #endif