From c81101f016e3221de57895dfe44bdb6df32f842a Mon Sep 17 00:00:00 2001 From: Gregor Brunmar Date: Sat, 29 Dec 2007 15:19:13 +0000 Subject: [PATCH] Display device enumeration in d3d9 svn path=/trunk/; revision=31492 --- reactos/dll/directx/d3d9/d3d9_helpers.c | 75 +++- reactos/dll/directx/d3d9/d3d9_private.h | 573 +++++------------------- 2 files changed, 184 insertions(+), 464 deletions(-) diff --git a/reactos/dll/directx/d3d9/d3d9_helpers.c b/reactos/dll/directx/d3d9/d3d9_helpers.c index d73daa9730b..b74d200299f 100644 --- a/reactos/dll/directx/d3d9/d3d9_helpers.c +++ b/reactos/dll/directx/d3d9/d3d9_helpers.c @@ -13,10 +13,12 @@ #define MEM_ALIGNMENT 0x20 -static LPCSTR D3dDebugRegPath = "Software\\Microsoft\\Direct3D"; +static LPCSTR D3D9_DebugRegPath = "Software\\Microsoft\\Direct3D"; static const GUID DISPLAY_GUID = { 0x67685559, 0x3106, 0x11D0, { 0xB9, 0x71, 0x00, 0xAA, 0x00, 0x34, 0x2F, 0x9F } }; +static CHAR D3D9_PrimaryDeviceName[32]; + LPDIRECT3D9_INT impl_from_IDirect3D9(LPDIRECT3D9 iface) { return (LPDIRECT3D9_INT)((ULONG_PTR)iface - FIELD_OFFSET(DIRECT3D9_INT, lpVtbl)); @@ -28,7 +30,7 @@ BOOL ReadRegistryValue(IN DWORD ValueType, IN LPCSTR ValueName, OUT LPBYTE DataB DWORD Type; LONG Ret; - if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, D3dDebugRegPath, 0, KEY_QUERY_VALUE, &hKey)) + if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, D3D9_DebugRegPath, 0, KEY_QUERY_VALUE, &hKey)) return FALSE; Ret = RegQueryValueEx(hKey, ValueName, 0, &Type, DataBuffer, DataBufferSize); @@ -63,6 +65,68 @@ HRESULT FormatDebugString(IN OUT LPSTR Buffer, IN LONG BufferSize, IN LPCSTR For return 0; } +static BOOL GetDisplayDeviceInfo(IN OUT LPDIRECT3D9_INT pDirect3D9) +{ + DISPLAY_DEVICEA DisplayDevice; + DWORD AdapterIndex; + DWORD Planes; + DWORD Bpp; + HDC hDC; + + memset(&DisplayDevice, 0, sizeof(DISPLAY_DEVICEA)); + DisplayDevice.cb = sizeof(DISPLAY_DEVICEA); + + pDirect3D9->dwNumDisplayAdapters = 0; + D3D9_PrimaryDeviceName[0] = '\0'; + + AdapterIndex = 0; + while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) + { + if ((DisplayDevice.StateFlags & (DISPLAY_DEVICE_DISCONNECT | DISPLAY_DEVICE_MIRRORING_DRIVER)) == 0 && + (DisplayDevice.StateFlags & (DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)) != 0) + { + memcpy(&pDirect3D9->DisplayAdapters[0].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); + + lstrcpynA(pDirect3D9->DisplayAdapters[0].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); + + if (pDirect3D9->dwNumDisplayAdapters == 0) + lstrcpynA(D3D9_PrimaryDeviceName, DisplayDevice.DeviceName, sizeof(D3D9_PrimaryDeviceName)); + + pDirect3D9->DisplayAdapters[0].dwStateFlags = DisplayDevice.StateFlags; + pDirect3D9->DisplayAdapters[0].bInUseFlag = TRUE; + + ++pDirect3D9->dwNumDisplayAdapters; + } + } + + AdapterIndex = 0; + while (EnumDisplayDevicesA(NULL, AdapterIndex, &DisplayDevice, 0) == TRUE) + { + if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) != 0 && + (DisplayDevice.StateFlags & (DISPLAY_DEVICE_MIRRORING_DRIVER | DISPLAY_DEVICE_PRIMARY_DEVICE)) == 0) + { + memcpy(&pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); + + lstrcpynA(pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].szDeviceName, DisplayDevice.DeviceName, MAX_PATH); + + pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].dwStateFlags = DisplayDevice.StateFlags; + pDirect3D9->DisplayAdapters[pDirect3D9->dwNumDisplayAdapters].bInUseFlag = TRUE; + + ++pDirect3D9->dwNumDisplayAdapters; + } + } + + hDC = GetDC(NULL); + Planes = GetDeviceCaps(hDC, PLANES); + Bpp = GetDeviceCaps(hDC, BITSPIXEL); + ReleaseDC(NULL, hDC); + + if (Planes * Bpp < 8) + return FALSE; + + return TRUE; +} + HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9) { LPDIRECT3D9_INT pDirect3D9; @@ -80,7 +144,7 @@ HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9) pDirect3D9->lpInt = 0; pDirect3D9->lpVtbl = &Direct3D9_Vtbl; - pDirect3D9->dwProcessId = GetCurrentThreadId(); + //pDirect3D9->dwProcessId = GetCurrentThreadId(); pDirect3D9->dwRefCnt = 1; pDirect3D9->unknown004576 = 0; @@ -95,9 +159,10 @@ HRESULT CreateD3D9(OUT LPDIRECT3D9 *ppDirect3D9) pDirect3D9->lpInt = pDirect3D9; pDirect3D9->unknown000007 = 1; - InitializeCriticalSection(&pDirect3D9->d3d9_cs); + //InitializeCriticalSection(&pDirect3D9->d3d9_cs); - memcpy(&pDirect3D9->DisplayGuid, &DISPLAY_GUID, sizeof(GUID)); + //memset(pDirect3D9->DisplayAdapters, 0, sizeof(pDirect3D9->DisplayAdapters)); + GetDisplayDeviceInfo(pDirect3D9); *ppDirect3D9 = (LPDIRECT3D9)&pDirect3D9->lpVtbl; diff --git a/reactos/dll/directx/d3d9/d3d9_private.h b/reactos/dll/directx/d3d9/d3d9_private.h index 19135b63c25..2ae86a8ced3 100644 --- a/reactos/dll/directx/d3d9/d3d9_private.h +++ b/reactos/dll/directx/d3d9/d3d9_private.h @@ -19,6 +19,118 @@ typedef IDirect3D9* (WINAPI *LPDIRECT3DCREATE9)(UINT); extern const IDirect3D9Vtbl Direct3D9_Vtbl; +typedef struct _tagDIRECT3D9DisplayAdapterInfo_ +{ +/* 0x0000 */ GUID DisplayGuid; +/* 0x0010 */ CHAR szDeviceName[MAX_PATH]; +/* 0x0114 */ DWORD dwStateFlags; +/* 0x0118 */ BOOL bInUseFlag; +/* 0x011c */ DWORD unknown000002; +/* 0x0120 */ DWORD unknown000003; +/* 0x0124 */ DWORD unknown000004; /* 0x00000001 */ +/* 0x0128 */ DWORD unknown000005; +/* 0x012c */ DWORD unknown000006; +/* 0x0130 */ DWORD unknown000007; +/* 0x0134 */ DWORD unknown000008; +/* 0x0138 */ DWORD unknown000009; +/* 0x013c */ DWORD unknown000010; +/* 0x0140 */ DWORD unknown000011; +/* 0x0144 */ DWORD unknown000012; +/* 0x0148 */ DWORD unknown000013; +/* 0x014c */ DWORD unknown000014; +/* 0x0150 */ DWORD unknown000015; +/* 0x0154 */ DWORD unknown000016; +/* 0x0158 */ DWORD unknown000017; +/* 0x015c */ DWORD unknown000018; +/* 0x0160 */ DWORD unknown000019; +/* 0x0164 */ DWORD unknown000020; +/* 0x0168 */ DWORD unknown000021; +/* 0x016c */ DWORD unknown000022; +/* 0x0170 */ DWORD unknown000023; +/* 0x0174 */ DWORD unknown000024; +/* 0x0178 */ DWORD unknown000025; +/* 0x017c */ DWORD unknown000026; +/* 0x0180 */ DWORD unknown000027; +/* 0x0184 */ DWORD unknown000028; +/* 0x0188 */ DWORD unknown000029; +/* 0x018c */ DWORD unknown000030; +/* 0x0190 */ DWORD unknown000031; +/* 0x0194 */ DWORD unknown000032; +/* 0x0198 */ DWORD unknown000033; +/* 0x019c */ DWORD unknown000034; +/* 0x01a0 */ DWORD unknown000035; +/* 0x01a4 */ DWORD unknown000036; +/* 0x01a8 */ DWORD unknown000037; +/* 0x01ac */ DWORD unknown000038; +/* 0x01b0 */ DWORD unknown000039; +/* 0x01b4 */ DWORD unknown000040; +/* 0x01b8 */ DWORD unknown000041; +/* 0x01bc */ DWORD unknown000042; +/* 0x01c0 */ DWORD unknown000043; +/* 0x01c4 */ DWORD unknown000044; +/* 0x01c8 */ DWORD unknown000045; +/* 0x01cc */ DWORD unknown000046; +/* 0x01d0 */ DWORD unknown000047; +/* 0x01d4 */ DWORD unknown000048; +/* 0x01d8 */ DWORD unknown000049; +/* 0x01dc */ DWORD unknown000050; +/* 0x01e0 */ DWORD unknown000051; +/* 0x01e4 */ DWORD unknown000052; +/* 0x01e8 */ DWORD unknown000053; +/* 0x01ec */ DWORD unknown000054; +/* 0x01f0 */ DWORD unknown000055; +/* 0x01f4 */ DWORD unknown000056; +/* 0x01f8 */ DWORD unknown000057; +/* 0x01fc */ DWORD unknown000058; +/* 0x0200 */ DWORD unknown000059; +/* 0x0204 */ DWORD unknown000060; +/* 0x0208 */ DWORD unknown000061; +/* 0x020c */ DWORD unknown000062; +/* 0x0210 */ DWORD unknown000063; +/* 0x0214 */ DWORD unknown000064; +/* 0x0218 */ DWORD unknown000065; +/* 0x021c */ DWORD unknown000066; +/* 0x0220 */ DWORD unknown000067; +/* 0x0224 */ DWORD unknown000068; +/* 0x0228 */ DWORD unknown000069; +/* 0x022c */ DWORD unknown000070; +/* 0x0230 */ DWORD unknown000071; +/* 0x0234 */ DWORD unknown000072; +/* 0x0238 */ DWORD unknown000073; +/* 0x023c */ DWORD unknown000074; +/* 0x0240 */ DWORD unknown000075; +/* 0x0244 */ DWORD unknown000076; +/* 0x0248 */ DWORD unknown000077; +/* 0x024c */ DWORD unknown000078; +/* 0x0250 */ DWORD unknown000079; +/* 0x0254 */ DWORD unknown000080; +/* 0x0258 */ DWORD unknown000081; +/* 0x025c */ DWORD unknown000082; +/* 0x0260 */ DWORD unknown000083; +/* 0x0264 */ DWORD unknown000084; +/* 0x0268 */ DWORD unknown000085; +/* 0x026c */ DWORD dwDisplayWidth; /* Current display res */ +/* 0x0270 */ DWORD dwDisplayHeight; /* Current display res */ +/* 0x0274 */ DWORD unknown000088; +/* 0x0278 */ DWORD unknown000089; +/* 0x027c */ DWORD unknown000090; +/* 0x0280 */ DWORD unknown000091; +/* 0x0284 */ DWORD unknown000092; +/* 0x0288 */ DWORD unknown000093; +/* 0x028c */ DWORD unknown000094; +/* 0x0290 */ DWORD unknown000095; +/* 0x0294 */ DWORD unknown000096; +/* 0x0298 */ DWORD unknown000097; +/* 0x029c */ DWORD unknown000098; +/* 0x02a0 */ DWORD unknown000099; +/* 0x02a4 */ DWORD unknown000100; +/* 0x02a8 */ DWORD unknown000101; /*? 0xf7627000 */ +/* 0x02ac */ DWORD unknown000102; /*? 0x00000002 */ +/* 0x02b0 */ DWORD unknown000103; /*? 0x001552A0 */ +/* 0x02b4 */ DWORD unknown000104; +/* 0x02b8 */ DWORD unknown000105; +} Direct3D9DisplayAdapterInfo_INT; + typedef struct _tagDIRECT3D9_INT_ { /* 0x0000 */ const IDirect3D9Vtbl *lpVtbl; /* LPDIRECTD3D9 functoions table */ @@ -27,465 +139,8 @@ typedef struct _tagDIRECT3D9_INT_ /* 0x0020 */ DWORD dwProcessId; /* 0x0024 */ struct _tagDIRECT3D9_INT_ *lpInt; /* 0x0028 */ LONG dwRefCnt; /* Increases and decreases by AddRef() and Release() */ -/* 0x002c */ DWORD unknown000011; /* 0x00000001 - Probably NumDisplays */ -/* 0x0030 */ GUID DisplayGuid; /*? Always {67685559-3106-11D0-B971-00AA00342F9F} ? */ -/* 0x0040 */ CHAR DeviceName[MAX_PATH]; -/* 0x0144 */ DWORD StateFlags; /*? 0x80000001 */ -/* 0x0148 */ DWORD unknown000082; /*? 0x00000001 */ -/* 0x014c */ DWORD unknown000083; -/* 0x0150 */ DWORD unknown000084; -/* 0x0154 */ DWORD unknown000085; /* 0x00000001 */ -/* 0x0158 */ DWORD unknown000086; -/* 0x015c */ DWORD unknown000087; -/* 0x0160 */ DWORD unknown000088; -/* 0x0164 */ DWORD unknown000089; -/* 0x0168 */ DWORD unknown000090; -/* 0x016c */ DWORD unknown000091; -/* 0x0170 */ DWORD unknown000092; -/* 0x0174 */ DWORD unknown000093; -/* 0x0178 */ DWORD unknown000094; -/* 0x017c */ DWORD unknown000095; -/* 0x0180 */ DWORD unknown000096; -/* 0x0184 */ DWORD unknown000097; -/* 0x0188 */ DWORD unknown000098; -/* 0x018c */ DWORD unknown000099; -/* 0x0190 */ DWORD unknown000100; -/* 0x0194 */ DWORD unknown000101; -/* 0x0198 */ DWORD unknown000102; -/* 0x019c */ DWORD unknown000103; -/* 0x01a0 */ DWORD unknown000104; -/* 0x01a4 */ DWORD unknown000105; -/* 0x01a8 */ DWORD unknown000106; -/* 0x01ac */ DWORD unknown000107; -/* 0x01b0 */ DWORD unknown000108; -/* 0x01b4 */ DWORD unknown000109; -/* 0x01b8 */ DWORD unknown000110; -/* 0x01bc */ DWORD unknown000111; -/* 0x01c0 */ DWORD unknown000112; -/* 0x01c4 */ DWORD unknown000113; -/* 0x01c8 */ DWORD unknown000114; -/* 0x01cc */ DWORD unknown000115; -/* 0x01d0 */ DWORD unknown000116; -/* 0x01d4 */ DWORD unknown000117; -/* 0x01d8 */ DWORD unknown000118; -/* 0x01dc */ DWORD unknown000119; -/* 0x01e0 */ DWORD unknown000120; -/* 0x01e4 */ DWORD unknown000121; -/* 0x01e8 */ DWORD unknown000122; -/* 0x01ec */ DWORD unknown000123; -/* 0x01f0 */ DWORD unknown000124; -/* 0x01f4 */ DWORD unknown000125; -/* 0x01f8 */ DWORD unknown000126; -/* 0x01fc */ DWORD unknown000127; -/* 0x0200 */ DWORD unknown000128; -/* 0x0204 */ DWORD unknown000129; -/* 0x0208 */ DWORD unknown000130; -/* 0x020c */ DWORD unknown000131; -/* 0x0210 */ DWORD unknown000132; -/* 0x0214 */ DWORD unknown000133; -/* 0x0218 */ DWORD unknown000134; -/* 0x021c */ DWORD unknown000135; -/* 0x0220 */ DWORD unknown000136; -/* 0x0224 */ DWORD unknown000137; -/* 0x0228 */ DWORD unknown000138; -/* 0x022c */ DWORD unknown000139; -/* 0x0230 */ DWORD unknown000140; -/* 0x0234 */ DWORD unknown000141; -/* 0x0238 */ DWORD unknown000142; -/* 0x023c */ DWORD unknown000143; -/* 0x0240 */ DWORD unknown000144; -/* 0x0244 */ DWORD unknown000145; -/* 0x0248 */ DWORD unknown000146; -/* 0x024c */ DWORD unknown000147; -/* 0x0250 */ DWORD unknown000148; -/* 0x0254 */ DWORD unknown000149; -/* 0x0258 */ DWORD unknown000150; -/* 0x025c */ DWORD unknown000151; -/* 0x0260 */ DWORD unknown000152; -/* 0x0264 */ DWORD unknown000153; -/* 0x0268 */ DWORD unknown000154; -/* 0x026c */ DWORD unknown000155; -/* 0x0270 */ DWORD unknown000156; -/* 0x0274 */ DWORD unknown000157; -/* 0x0278 */ DWORD unknown000158; -/* 0x027c */ DWORD unknown000159; -/* 0x0280 */ DWORD unknown000160; -/* 0x0284 */ DWORD unknown000161; -/* 0x0288 */ DWORD unknown000162; -/* 0x028c */ DWORD unknown000163; -/* 0x0290 */ DWORD unknown000164; -/* 0x0294 */ DWORD unknown000165; -/* 0x0298 */ DWORD unknown000166; -/* 0x029c */ DWORD dwDisplayWidth; /* Current display res */ -/* 0x02a0 */ DWORD dwDisplayHeight; /* Current display res */ -/* 0x02a4 */ DWORD unknown000169; -/* 0x02a8 */ DWORD unknown000170; -/* 0x02ac */ DWORD unknown000171; -/* 0x02b0 */ DWORD unknown000172; -/* 0x02b4 */ DWORD unknown000173; -/* 0x02b8 */ DWORD unknown000174; -/* 0x02bc */ DWORD unknown000175; -/* 0x02c0 */ DWORD unknown000176; -/* 0x02c4 */ DWORD unknown000177; -/* 0x02c8 */ DWORD unknown000178; -/* 0x02cc */ DWORD unknown000179; -/* 0x02d0 */ DWORD unknown000180; -/* 0x02d4 */ DWORD unknown000181; -/* 0x02d8 */ DWORD unknown000182; /*? 0xf7627000 */ -/* 0x02dc */ DWORD unknown000183; /*? 0x00000002 */ -/* 0x02e0 */ DWORD unknown000184; /*? 0x001552A0 */ -/* 0x02e4 */ DWORD unknown000185; -/* 0x02e8 */ DWORD unknown000186; -/* 0x02ec */ DWORD unknown000187; -/* 0x02f0 */ DWORD unknown000188; -/* 0x02f4 */ DWORD unknown000189; -/* 0x02f8 */ DWORD unknown000190; -/* 0x02fc */ DWORD unknown000191; -/* 0x0300 */ DWORD unknown000192; -/* 0x0304 */ DWORD unknown000193; -/* 0x0308 */ DWORD unknown000194; -/* 0x030c */ DWORD unknown000195; -/* 0x0310 */ DWORD unknown000196; -/* 0x0314 */ DWORD unknown000197; -/* 0x0318 */ DWORD unknown000198; -/* 0x031c */ DWORD unknown000199; -/* 0x0320 */ DWORD unknown000200; -/* 0x0324 */ DWORD unknown000201; -/* 0x0328 */ DWORD unknown000202; -/* 0x032c */ DWORD unknown000203; -/* 0x0330 */ DWORD unknown000204; -/* 0x0334 */ DWORD unknown000205; -/* 0x0338 */ DWORD unknown000206; -/* 0x033c */ DWORD unknown000207; -/* 0x0340 */ DWORD unknown000208; -/* 0x0344 */ DWORD unknown000209; -/* 0x0348 */ DWORD unknown000210; -/* 0x034c */ DWORD unknown000211; -/* 0x0350 */ DWORD unknown000212; -/* 0x0354 */ DWORD unknown000213; -/* 0x0358 */ DWORD unknown000214; -/* 0x035c */ DWORD unknown000215; -/* 0x0360 */ DWORD unknown000216; -/* 0x0364 */ DWORD unknown000217; -/* 0x0368 */ DWORD unknown000218; -/* 0x036c */ DWORD unknown000219; -/* 0x0370 */ DWORD unknown000220; -/* 0x0374 */ DWORD unknown000221; -/* 0x0378 */ DWORD unknown000222; -/* 0x037c */ DWORD unknown000223; -/* 0x0380 */ DWORD unknown000224; -/* 0x0384 */ DWORD unknown000225; -/* 0x0388 */ DWORD unknown000226; -/* 0x038c */ DWORD unknown000227; -/* 0x0390 */ DWORD unknown000228; -/* 0x0394 */ DWORD unknown000229; -/* 0x0398 */ DWORD unknown000230; -/* 0x039c */ DWORD unknown000231; -/* 0x03a0 */ DWORD unknown000232; -/* 0x03a4 */ DWORD unknown000233; -/* 0x03a8 */ DWORD unknown000234; -/* 0x03ac */ DWORD unknown000235; -/* 0x03b0 */ DWORD unknown000236; -/* 0x03b4 */ DWORD unknown000237; -/* 0x03b8 */ DWORD unknown000238; -/* 0x03bc */ DWORD unknown000239; -/* 0x03c0 */ DWORD unknown000240; -/* 0x03c4 */ DWORD unknown000241; -/* 0x03c8 */ DWORD unknown000242; -/* 0x03cc */ DWORD unknown000243; -/* 0x03d0 */ DWORD unknown000244; -/* 0x03d4 */ DWORD unknown000245; -/* 0x03d8 */ DWORD unknown000246; -/* 0x03dc */ DWORD unknown000247; -/* 0x03e0 */ DWORD unknown000248; -/* 0x03e4 */ DWORD unknown000249; -/* 0x03e8 */ DWORD unknown000250; -/* 0x03ec */ DWORD unknown000251; -/* 0x03f0 */ DWORD unknown000252; -/* 0x03f4 */ DWORD unknown000253; -/* 0x03f8 */ DWORD unknown000254; -/* 0x03fc */ DWORD unknown000255; -/* 0x0400 */ DWORD unknown000256; -/* 0x0404 */ DWORD unknown000257; -/* 0x0408 */ DWORD unknown000258; -/* 0x040c */ DWORD unknown000259; -/* 0x0410 */ DWORD unknown000260; -/* 0x0414 */ DWORD unknown000261; -/* 0x0418 */ DWORD unknown000262; -/* 0x041c */ DWORD unknown000263; -/* 0x0420 */ DWORD unknown000264; -/* 0x0424 */ DWORD unknown000265; -/* 0x0428 */ DWORD unknown000266; -/* 0x042c */ DWORD unknown000267; -/* 0x0430 */ DWORD unknown000268; -/* 0x0434 */ DWORD unknown000269; -/* 0x0438 */ DWORD unknown000270; -/* 0x043c */ DWORD unknown000271; -/* 0x0440 */ DWORD unknown000272; -/* 0x0444 */ DWORD unknown000273; -/* 0x0448 */ DWORD unknown000274; -/* 0x044c */ DWORD unknown000275; -/* 0x0450 */ DWORD unknown000276; -/* 0x0454 */ DWORD unknown000277; -/* 0x0458 */ DWORD unknown000278; -/* 0x045c */ DWORD unknown000279; -/* 0x0460 */ DWORD unknown000280; -/* 0x0464 */ DWORD unknown000281; -/* 0x0468 */ DWORD unknown000282; -/* 0x046c */ DWORD unknown000283; -/* 0x0470 */ DWORD unknown000284; -/* 0x0474 */ DWORD unknown000285; -/* 0x0478 */ DWORD unknown000286; -/* 0x047c */ DWORD unknown000287; -/* 0x0480 */ DWORD unknown000288; -/* 0x0484 */ DWORD unknown000289; -/* 0x0488 */ DWORD unknown000290; -/* 0x048c */ DWORD unknown000291; -/* 0x0490 */ DWORD unknown000292; -/* 0x0494 */ DWORD unknown000293; -/* 0x0498 */ DWORD unknown000294; -/* 0x049c */ DWORD unknown000295; -/* 0x04a0 */ DWORD unknown000296; -/* 0x04a4 */ DWORD unknown000297; -/* 0x04a8 */ DWORD unknown000298; -/* 0x04ac */ DWORD unknown000299; -/* 0x04b0 */ DWORD unknown000300; -/* 0x04b4 */ DWORD unknown000301; -/* 0x04b8 */ DWORD unknown000302; -/* 0x04bc */ DWORD unknown000303; -/* 0x04c0 */ DWORD unknown000304; -/* 0x04c4 */ DWORD unknown000305; -/* 0x04c8 */ DWORD unknown000306; -/* 0x04cc */ DWORD unknown000307; -/* 0x04d0 */ DWORD unknown000308; -/* 0x04d4 */ DWORD unknown000309; -/* 0x04d8 */ DWORD unknown000310; -/* 0x04dc */ DWORD unknown000311; -/* 0x04e0 */ DWORD unknown000312; -/* 0x04e4 */ DWORD unknown000313; -/* 0x04e8 */ DWORD unknown000314; -/* 0x04ec */ DWORD unknown000315; -/* 0x04f0 */ DWORD unknown000316; -/* 0x04f4 */ DWORD unknown000317; -/* 0x04f8 */ DWORD unknown000318; -/* 0x04fc */ DWORD unknown000319; -/* 0x0500 */ DWORD unknown000320; -/* 0x0504 */ DWORD unknown000321; -/* 0x0508 */ DWORD unknown000322; -/* 0x050c */ DWORD unknown000323; -/* 0x0510 */ DWORD unknown000324; -/* 0x0514 */ DWORD unknown000325; -/* 0x0518 */ DWORD unknown000326; -/* 0x051c */ DWORD unknown000327; -/* 0x0520 */ DWORD unknown000328; -/* 0x0524 */ DWORD unknown000329; -/* 0x0528 */ DWORD unknown000330; -/* 0x052c */ DWORD unknown000331; -/* 0x0530 */ DWORD unknown000332; -/* 0x0534 */ DWORD unknown000333; -/* 0x0538 */ DWORD unknown000334; -/* 0x053c */ DWORD unknown000335; -/* 0x0540 */ DWORD unknown000336; -/* 0x0544 */ DWORD unknown000337; -/* 0x0548 */ DWORD unknown000338; -/* 0x054c */ DWORD unknown000339; -/* 0x0550 */ DWORD unknown000340; -/* 0x0554 */ DWORD unknown000341; -/* 0x0558 */ DWORD unknown000342; -/* 0x055c */ DWORD unknown000343; -/* 0x0560 */ DWORD unknown000344; -/* 0x0564 */ DWORD unknown000345; -/* 0x0568 */ DWORD unknown000346; -/* 0x056c */ DWORD unknown000347; -/* 0x0570 */ DWORD unknown000348; -/* 0x0574 */ DWORD unknown000349; -/* 0x0578 */ DWORD unknown000350; -/* 0x057c */ DWORD unknown000351; -/* 0x0580 */ DWORD unknown000352; -/* 0x0584 */ DWORD unknown000353; -/* 0x0588 */ DWORD unknown000354; -/* 0x058c */ DWORD unknown000355; -/* 0x0590 */ DWORD unknown000356; -/* 0x0594 */ DWORD unknown000357; -/* 0x0598 */ DWORD unknown000358; -/* 0x059c */ DWORD unknown000359; -/* 0x05a0 */ DWORD unknown000360; -/* 0x05a4 */ DWORD unknown000361; -/* 0x05a8 */ DWORD unknown000362; -/* 0x05ac */ DWORD unknown000363; -/* 0x05b0 */ DWORD unknown000364; -/* 0x05b4 */ DWORD unknown000365; -/* 0x05b8 */ DWORD unknown000366; -/* 0x05bc */ DWORD unknown000367; -/* 0x05c0 */ DWORD unknown000368; -/* 0x05c4 */ DWORD unknown000369; -/* 0x05c8 */ DWORD unknown000370; -/* 0x05cc */ DWORD unknown000371; -/* 0x05d0 */ DWORD unknown000372; -/* 0x05d4 */ DWORD unknown000373; -/* 0x05d8 */ DWORD unknown000374; -/* 0x05dc */ DWORD unknown000375; -/* 0x05e0 */ DWORD unknown000376; -/* 0x05e4 */ DWORD unknown000377; -/* 0x05e8 */ DWORD unknown000378; -/* 0x05ec */ DWORD unknown000379; -/* 0x05f0 */ DWORD unknown000380; -/* 0x05f4 */ DWORD unknown000381; -/* 0x05f8 */ DWORD unknown000382; -/* 0x05fc */ DWORD unknown000383; -/* 0x0600 */ DWORD unknown000384; -/* 0x0604 */ DWORD unknown000385; -/* 0x0608 */ DWORD unknown000386; -/* 0x060c */ DWORD unknown000387; -/* 0x0610 */ DWORD unknown000388; -/* 0x0614 */ DWORD unknown000389; -/* 0x0618 */ DWORD unknown000390; -/* 0x061c */ DWORD unknown000391; -/* 0x0620 */ DWORD unknown000392; -/* 0x0624 */ DWORD unknown000393; -/* 0x0628 */ DWORD unknown000394; -/* 0x062c */ DWORD unknown000395; -/* 0x0630 */ DWORD unknown000396; -/* 0x0634 */ DWORD unknown000397; -/* 0x0638 */ DWORD unknown000398; -/* 0x063c */ DWORD unknown000399; -/* 0x0640 */ DWORD unknown000400; -/* 0x0644 */ DWORD unknown000401; -/* 0x0648 */ DWORD unknown000402; -/* 0x064c */ DWORD unknown000403; -/* 0x0650 */ DWORD unknown000404; -/* 0x0654 */ DWORD unknown000405; -/* 0x0658 */ DWORD unknown000406; -/* 0x065c */ DWORD unknown000407; -/* 0x0660 */ DWORD unknown000408; -/* 0x0664 */ DWORD unknown000409; -/* 0x0668 */ DWORD unknown000410; -/* 0x066c */ DWORD unknown000411; -/* 0x0670 */ DWORD unknown000412; -/* 0x0674 */ DWORD unknown000413; -/* 0x0678 */ DWORD unknown000414; -/* 0x067c */ DWORD unknown000415; -/* 0x0680 */ DWORD unknown000416; -/* 0x0684 */ DWORD unknown000417; -/* 0x0688 */ DWORD unknown000418; -/* 0x068c */ DWORD unknown000419; -/* 0x0690 */ DWORD unknown000420; -/* 0x0694 */ DWORD unknown000421; -/* 0x0698 */ DWORD unknown000422; -/* 0x069c */ DWORD unknown000423; -/* 0x06a0 */ DWORD unknown000424; -/* 0x06a4 */ DWORD unknown000425; -/* 0x06a8 */ DWORD unknown000426; -/* 0x06ac */ DWORD unknown000427; -/* 0x06b0 */ DWORD unknown000428; -/* 0x06b4 */ DWORD unknown000429; -/* 0x06b8 */ DWORD unknown000430; -/* 0x06bc */ DWORD unknown000431; -/* 0x06c0 */ DWORD unknown000432; -/* 0x06c4 */ DWORD unknown000433; -/* 0x06c8 */ DWORD unknown000434; -/* 0x06cc */ DWORD unknown000435; -/* 0x06d0 */ DWORD unknown000436; -/* 0x06d4 */ DWORD unknown000437; -/* 0x06d8 */ DWORD unknown000438; -/* 0x06dc */ DWORD unknown000439; -/* 0x06e0 */ DWORD unknown000440; -/* 0x06e4 */ DWORD unknown000441; -/* 0x06e8 */ DWORD unknown000442; -/* 0x06ec */ DWORD unknown000443; -/* 0x06f0 */ DWORD unknown000444; -/* 0x06f4 */ DWORD unknown000445; -/* 0x06f8 */ DWORD unknown000446; -/* 0x06fc */ DWORD unknown000447; -/* 0x0700 */ DWORD unknown000448; -/* 0x0704 */ DWORD unknown000449; -/* 0x0708 */ DWORD unknown000450; -/* 0x070c */ DWORD unknown000451; -/* 0x0710 */ DWORD unknown000452; -/* 0x0714 */ DWORD unknown000453; -/* 0x0718 */ DWORD unknown000454; -/* 0x071c */ DWORD unknown000455; -/* 0x0720 */ DWORD unknown000456; -/* 0x0724 */ DWORD unknown000457; -/* 0x0728 */ DWORD unknown000458; -/* 0x072c */ DWORD unknown000459; -/* 0x0730 */ DWORD unknown000460; -/* 0x0734 */ DWORD unknown000461; -/* 0x0738 */ DWORD unknown000462; -/* 0x073c */ DWORD unknown000463; -/* 0x0740 */ DWORD unknown000464; -/* 0x0744 */ DWORD unknown000465; -/* 0x0748 */ DWORD unknown000466; -/* 0x074c */ DWORD unknown000467; -/* 0x0750 */ DWORD unknown000468; -/* 0x0754 */ DWORD unknown000469; -/* 0x0758 */ DWORD unknown000470; -/* 0x075c */ DWORD unknown000471; -/* 0x0760 */ DWORD unknown000472; -/* 0x0764 */ DWORD unknown000473; -/* 0x0768 */ DWORD unknown000474; -/* 0x076c */ DWORD unknown000475; -/* 0x0770 */ DWORD unknown000476; -/* 0x0774 */ DWORD unknown000477; -/* 0x0778 */ DWORD unknown000478; -/* 0x077c */ DWORD unknown000479; -/* 0x0780 */ DWORD unknown000480; -/* 0x0784 */ DWORD unknown000481; -/* 0x0788 */ DWORD unknown000482; -/* 0x078c */ DWORD unknown000483; -/* 0x0790 */ DWORD unknown000484; -/* 0x0794 */ DWORD unknown000485; -/* 0x0798 */ DWORD unknown000486; -/* 0x079c */ DWORD unknown000487; -/* 0x07a0 */ DWORD unknown000488; -/* 0x07a4 */ DWORD unknown000489; -/* 0x07a8 */ DWORD unknown000490; -/* 0x07ac */ DWORD unknown000491; -/* 0x07b0 */ DWORD unknown000492; -/* 0x07b4 */ DWORD unknown000493; -/* 0x07b8 */ DWORD unknown000494; -/* 0x07bc */ DWORD unknown000495; -/* 0x07c0 */ DWORD unknown000496; -/* 0x07c4 */ DWORD unknown000497; -/* 0x07c8 */ DWORD unknown000498; -/* 0x07cc */ DWORD unknown000499; -/* 0x07d0 */ DWORD unknown000500; -/* 0x07d4 */ DWORD unknown000501; -/* 0x07d8 */ DWORD unknown000502; -/* 0x07dc */ DWORD unknown000503; -/* 0x07e0 */ DWORD unknown000504; -/* 0x07e4 */ DWORD unknown000505; -/* 0x07e8 */ DWORD unknown000506; -/* 0x07ec */ DWORD unknown000507; -/* 0x07f0 */ DWORD unknown000508; -/* 0x07f4 */ DWORD unknown000509; -/* 0x07f8 */ DWORD unknown000510; -/* 0x07fc */ DWORD unknown000511; -/* 0x0800 */ DWORD unknown000512; -/* 0x0804 */ DWORD unknown000513; -/* 0x0808 */ DWORD unknown000514; -/* 0x080c */ DWORD unknown000515; -/* 0x0810 */ DWORD unknown000516; -/* 0x0814 */ DWORD unknown000517; -/* 0x0818 */ DWORD unknown000518; -/* 0x081c */ DWORD unknown000519; -/* 0x0820 */ DWORD unknown000520; -/* 0x0824 */ DWORD unknown000521; -/* 0x0828 */ DWORD unknown000522; -/* 0x082c */ DWORD unknown000523; -/* 0x0830 */ DWORD unknown000524; -/* 0x0834 */ DWORD unknown000525; -/* 0x0838 */ DWORD unknown000526; -/* 0x083c */ DWORD unknown000527; -/* 0x0840 */ DWORD unknown000528; -/* 0x0844 */ DWORD unknown000529; -/* 0x0848 */ DWORD unknown000530; -/* 0x084c */ DWORD unknown000531; -/* 0x0850 */ DWORD unknown000532; -/* 0x0854 */ DWORD unknown000533; -/* 0x0858 */ DWORD unknown000534; -/* 0x085c */ DWORD unknown000535; -/* 0x0860 */ DWORD unknown000536; +/* 0x002c */ DWORD dwNumDisplayAdapters; +/* 0x0030 */ Direct3D9DisplayAdapterInfo_INT DisplayAdapters[3]; /* 0x0864 */ DWORD unknown000537; /* 0x0868 */ DWORD unknown000538; /* 0x086c */ DWORD unknown000539;