76 return DDERR_INVALIDPARAMS;
80 uint32_t width = 640, height = 480,
bpp = 16;
81 uint32_t r_mask = 0xF800, g_mask = 0x07E0, b_mask = 0x001F, a_mask = 0;
82 bool updates_logical_resolution =
false;
85 const DDSURFACEDESC2 *desc2 = (
const DDSURFACEDESC2 *)
desc;
88 if (
flags & DDSD_WIDTH) {
89 width = desc2->dwWidth;
92 if (
flags & DDSD_HEIGHT) {
93 height = desc2->dwHeight;
96 if (
flags & DDSD_PIXELFORMAT) {
97 bpp = desc2->ddpfPixelFormat.dwRGBBitCount;
98 r_mask = desc2->ddpfPixelFormat.dwRBitMask;
99 g_mask = desc2->ddpfPixelFormat.dwGBitMask;
100 b_mask = desc2->ddpfPixelFormat.dwBBitMask;
101 a_mask = desc2->ddpfPixelFormat.dwRGBAlphaBitMask;
104 if (
flags & DDSD_CAPS) {
105 const DWORD caps = desc2->ddsCaps.dwCaps;
106 if (
caps & (DDSCAPS_PRIMARYSURFACE | DDSCAPS_3DDEVICE | DDSCAPS_BACKBUFFER)) {
107 updates_logical_resolution =
true;
119 if (validation !=
S_OK) {
134 return DDERR_OUTOFMEMORY;
137 if (updates_logical_resolution) {
147 ddraw7_duplicatesurface,
155 ddraw7_enumdisplaymodes,
182 ddraw7_getdisplaymode,
187static HRESULT __stdcall ddraw7_getfourcccodes(
202 ddraw7_getmonitorfrequency,
211 ddraw7_getverticalblankstatus,
222 ddraw7_setcooperativelevel,
228static HRESULT __stdcall ddraw7_setdisplaymode(
236 if (!
self ||
w == 0 ||
h == 0) {
237 return DDERR_INVALIDPARAMS;
249 "SetDisplayMode request: %lux%lu %lu-bpp @ %luHz flags=0x%lx",
261 ddraw7_waitforverticalblank,
267static HRESULT __stdcall ddraw7_getavailablevidmem(
274 *
tot = 128 * 1024 * 1024;
278 *
free = 64 * 1024 * 1024;
285 ddraw7_getsurfacefromdc,
296static HRESULT __stdcall ddraw7_getdeviceidentifier(
309 ddraw7_startmodetest,
325 .AddRef = ddraw7_addref,
326 .Release = ddraw7_release,
327 .Compact = ddraw7_compact,
331 .DuplicateSurface = ddraw7_duplicatesurface,
332 .EnumDisplayModes = ddraw7_enumdisplaymodes,
333 .EnumSurfaces = ddraw7_enumsurfaces,
334 .FlipToGDISurface = ddraw7_fliptogdisurface,
335 .GetCaps = ddraw7_getcaps,
336 .GetDisplayMode = ddraw7_getdisplaymode,
337 .GetFourCCCodes = ddraw7_getfourcccodes,
338 .GetGDISurface = ddraw7_getgdisurface,
339 .GetMonitorFrequency = ddraw7_getmonitorfrequency,
340 .GetScanLine = ddraw7_getscanline,
341 .GetVerticalBlankStatus = ddraw7_getverticalblankstatus,
342 .Initialize = ddraw7_initialize,
343 .RestoreDisplayMode = ddraw7_restoredisplaymode,
344 .SetCooperativeLevel = ddraw7_setcooperativelevel,
345 .SetDisplayMode = ddraw7_setdisplaymode,
346 .WaitForVerticalBlank = ddraw7_waitforverticalblank,
347 .GetAvailableVidMem = ddraw7_getavailablevidmem,
348 .GetSurfaceFromDC = ddraw7_getsurfacefromdc,
349 .RestoreAllSurfaces = ddraw7_restoreallsurfaces,
350 .TestCooperativeLevel = ddraw7_testcooperativelevel,
351 .GetDeviceIdentifier = ddraw7_getdeviceidentifier,
352 .StartModeTest = ddraw7_startmodetest,
353 .EvaluateMode = ddraw7_evaluatemode,
361 "Created DDraw7 translator at %p, vtbl=%p, QueryInterface=%p",
static DTTR_Graphics_COM_Direct3D7_VT vtbl
DTTR_Graphics_COM_Direct3D7 * dttr_graphics_com_create_direct3d7()
DTTR_Graphics_COM_Direct3DDevice7 * self
DTTR_Graphics_COM_Direct3DDevice7 void DWORD flags DWORD void DWORD flags
DTTR_Graphics_COM_Direct3DDevice7 void *status DTTR_Graphics_COM_Direct3DDevice7 DWORD DWORD void DWORD n
DTTR_Graphics_COM_DirectDraw7 *self DWORD DWORD DWORD bpp
DTTR_Graphics_COM_DirectDraw7 DWORD void void void *cb DTTR_Graphics_COM_DirectDraw7 void * drvCaps
static HRESULT ddraw7_createclipper(DTTR_Graphics_COM_DirectDraw7 *self, DWORD f, void **clip, void *outer)
static HRESULT ddraw7_createpalette(DTTR_Graphics_COM_DirectDraw7 *self, DWORD f, void *colors, void **pal, void *outer)
DTTR_Graphics_COM_DirectDraw7 *self DWORD DWORD h
dttr_graphics_set_logical_resolution((int) w,(int) h)
DTTR_Graphics_COM_DirectDraw7 DWORD void void void *cb DTTR_Graphics_COM_DirectDraw7 void void *helCaps DWORD * num
DTTR_Graphics_COM_DirectDraw7 DWORD f
DTTR_Graphics_COM_DirectDraw7 *self DWORD DWORD DWORD DWORD hz
DTTR_Graphics_COM_DirectDraw7 * dttr_graphics_com_create_directdraw7()
DTTR_Graphics_COM_DirectDraw7 DWORD void void void *cb DTTR_Graphics_COM_DirectDraw7 void void *helCaps DWORD DWORD * codes
static DTTR_Graphics_COM_Direct3D7 * ddraw7_get_direct3d()
static DTTR_Graphics_COM_Direct3D7 * ddraw7_d3d7
DTTR_Graphics_COM_DirectDraw7 *self DWORD w
static HRESULT ddraw7_createsurface(DTTR_Graphics_COM_DirectDraw7 *self, void *desc, void **surf, void *outer)
DTTR_Graphics_COM_DirectDraw7 DWORD void * desc
static HRESULT ddraw7_queryinterface(DTTR_Graphics_COM_DirectDraw7 *self, void *riid, void **ppv)
DTTR_Graphics_COM_DirectDrawSurface7 * dttr_graphics_com_create_directdrawsurface7(uint32_t width, uint32_t height, uint32_t bpp, uint32_t r_mask, uint32_t g_mask, uint32_t b_mask, uint32_t a_mask)
DTTR_Graphics_COM_DirectDrawSurface7 DWORD flags void NULL
HRESULT dttr_graphics_com_validate_directdrawsurface7(uint32_t width, uint32_t height, uint32_t bpp, uint32_t *out_pitch, size_t *out_pixel_size)
#define DTTR_LOG_DEBUG(...)
#define DTTR_COM_STUB_SET(fn, out_type, val,...)
#define DTTR_COM_NOOP_HRESULT(fn,...)
#define DTTR_COM_ADDREF(fn, type)
#define DTTR_COM_RELEASE(fn, type)
#define DTTR_SIZEOF_DDDEVICEIDENTIFIER2
HRESULT(* QueryInterface)(DTTR_Graphics_COM_DirectDraw7 *self, void *riid, void **ppv)
DTTR_Graphics_COM_DirectDraw7_VT * vtbl