1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00
cnc-ddraw/inc/dd.h

176 lines
4.2 KiB
C
Raw Normal View History

2020-10-13 09:20:52 +02:00
#ifndef DD_H
#define DD_H
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include "ddraw.h"
2020-10-13 09:20:52 +02:00
2023-08-04 07:18:29 +02:00
#ifdef __GNUC__
#define __try
#define __except(x) if (0)
#endif
2020-10-13 09:20:52 +02:00
typedef HRESULT(WINAPI* DIRECTDRAWCREATEPROC)(GUID FAR*, LPDIRECTDRAW FAR*, IUnknown FAR*);
2020-10-13 09:20:52 +02:00
ULONG dd_AddRef();
ULONG dd_Release();
HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback);
2021-06-11 20:30:43 +02:00
HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent);
2021-07-03 18:07:38 +02:00
HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFlags);
2020-10-13 09:20:52 +02:00
HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags);
HRESULT dd_RestoreDisplayMode();
2021-06-14 09:18:14 +02:00
HRESULT dd_GetCaps(LPDDCAPS_DX1 lpDDDriverCaps, LPDDCAPS_DX1 lpDDEmulCaps);
HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
2020-10-13 22:55:49 +02:00
HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq);
HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree);
2020-10-13 09:20:52 +02:00
HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB);
HRESULT dd_TestCooperativeLevel();
2021-09-02 22:22:48 +02:00
HRESULT dd_GetDeviceIdentifier(LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags, REFIID riid);
2020-10-15 05:13:37 +02:00
HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter);
2020-10-13 09:20:52 +02:00
2021-08-10 14:12:06 +02:00
#define FIX_CHILDS_DISABLED 0
#define FIX_CHILDS_DETECT 1
#define FIX_CHILDS_DETECT_PAINT 2
#define FIX_CHILDS_DETECT_HIDE 3
2021-08-10 14:12:06 +02:00
#define RESLIST_NORMAL 0
#define RESLIST_MINI 1
#define RESLIST_FULL 2
2023-07-04 20:13:49 +02:00
#define FILTER_NEAREST 0
#define FILTER_LINEAR 1
#define FILTER_CUBIC 2
2023-08-23 16:44:14 +02:00
#define FILTER_LANCZOS 3
2023-07-04 20:13:49 +02:00
2021-07-03 18:07:38 +02:00
#define SDM_MODE_SET_BY_GAME 0x00000001l
#define SDM_LEAVE_WINDOWED 0x00000002l
#define SDM_LEAVE_FULLSCREEN 0x00000004l
#define LIMIT_AUTO 0
#define LIMIT_TESTCOOP 1
#define LIMIT_BLTFAST 2
2024-06-15 05:28:06 +02:00
#ifndef CREATE_WAITABLE_TIMER_HIGH_RESOLUTION
#define CREATE_WAITABLE_TIMER_HIGH_RESOLUTION 0x00000002
#endif
#ifndef CREATE_WAITABLE_TIMER_MANUAL_RESET
#define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x00000001
#endif
2021-06-11 20:30:43 +02:00
typedef struct SPEEDLIMITER
2020-10-13 09:20:52 +02:00
{
DWORD tick_length;
LONGLONG tick_length_ns;
HANDLE htimer;
LARGE_INTEGER due_time;
BOOL dds_unlock_limiter_disabled;
2021-06-11 20:30:43 +02:00
} SPEEDLIMITER;
2020-10-13 09:20:52 +02:00
struct IDirectDrawSurfaceImpl;
2024-03-22 22:27:00 +01:00
extern struct CNCDDRAW g_ddraw;
2020-10-13 09:20:52 +02:00
2021-06-11 20:30:43 +02:00
typedef struct CNCDDRAW
2020-10-13 09:20:52 +02:00
{
2024-03-22 22:27:00 +01:00
LONG ref;
2020-10-13 09:20:52 +02:00
DWORD width;
DWORD height;
DWORD bpp;
2023-09-22 00:38:42 +02:00
2020-10-13 09:20:52 +02:00
DEVMODE mode;
2021-06-11 20:30:43 +02:00
struct IDirectDrawSurfaceImpl* primary;
2020-10-13 09:20:52 +02:00
char title[128];
2023-09-22 00:38:42 +02:00
CRITICAL_SECTION cs;
2020-10-13 09:20:52 +02:00
/* real export from system32\ddraw.dll */
HMODULE real_dll;
DIRECTDRAWCREATEPROC DirectDrawCreate;
2021-05-29 20:52:57 +02:00
LPDIRECTDRAW real_dd;
2020-10-13 09:20:52 +02:00
struct
{
int width;
int height;
2023-07-07 01:24:16 +02:00
int opengl_y_align;
2020-10-13 09:20:52 +02:00
HDC hdc;
2021-06-11 20:30:43 +02:00
int* tex;
2020-10-13 09:20:52 +02:00
HANDLE thread;
BOOL run;
HANDLE sem;
DEVMODE mode;
struct { int width; int height; int x; int y; } viewport;
LONG palette_updated;
LONG surface_updated;
LONG clear_screen;
2020-10-13 09:20:52 +02:00
float scale_w;
float scale_h;
float unscale_w;
float unscale_h;
} render;
2021-09-19 03:04:45 +02:00
struct
{
float scale_x;
float scale_y;
float unscale_x;
float unscale_y;
2021-09-19 03:04:45 +02:00
int y_adjust;
int x_adjust;
RECT rc;
} mouse;
2023-09-22 00:38:42 +02:00
DWORD(WINAPI* renderer)(void);
2020-10-13 09:20:52 +02:00
HWND hwnd;
2021-03-02 22:50:06 +01:00
WNDPROC wndproc;
2021-05-10 04:00:45 +02:00
struct { DWORD x; DWORD y; } cursor;
int upscale_hack_width;
int upscale_hack_height;
2020-10-13 10:53:30 +02:00
BOOL isredalert;
BOOL iscnc1;
BOOL iskkndx;
BOOL isworms2;
2021-05-15 02:58:07 +02:00
LONG upscale_hack_active;
2021-06-12 05:45:28 +02:00
HCURSOR old_cursor;
2021-06-17 04:12:05 +02:00
int show_cursor_count;
BOOL alt_key_down;
2020-10-13 09:20:52 +02:00
BOOL bnet_active;
BOOL bnet_was_fullscreen;
BOOL bnet_was_upscaled;
RECT bnet_win_rect;
POINT bnet_pos;
2021-06-11 20:30:43 +02:00
void* last_freed_palette; /* Dungeon Keeper hack */
2023-08-20 01:39:02 +02:00
void* last_freed_surface; /* Nox hack */
2020-10-13 09:20:52 +02:00
BOOL child_window_exists;
HWND video_window_hwnd;
2021-06-16 05:57:19 +02:00
BOOL got_child_windows;
2021-06-11 20:30:43 +02:00
DWORD last_set_window_pos_tick; /* WINE hack */
SPEEDLIMITER ticks_limiter;
SPEEDLIMITER flip_limiter;
2023-09-23 17:48:06 +02:00
DWORD minfps_tick_len;
2022-10-20 03:13:09 +02:00
DWORD gui_thread_id;
2023-09-22 00:38:42 +02:00
BOOL show_driver_warning;
2021-06-11 20:30:43 +02:00
2024-07-14 07:21:07 +02:00
struct
{
HWND hwnd;
int x;
int y;
} textbox; /* Age Of Empires 2 textbox align */
2024-07-23 23:25:02 +02:00
struct
{
BOOL enabled;
} zoom; /* Age Of Empires 2 textbox align */
2021-06-11 20:30:43 +02:00
} CNCDDRAW;
2020-10-13 09:20:52 +02:00
#endif