wined3d: Use the adapter to read the display mode.
This commit is contained in:
parent
cff265950a
commit
7f10ee453a
@ -1402,6 +1402,8 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic
|
|||||||
HRESULT hr = WINED3D_OK;
|
HRESULT hr = WINED3D_OK;
|
||||||
IUnknown *bufferParent;
|
IUnknown *bufferParent;
|
||||||
BOOL displaymode_set = FALSE;
|
BOOL displaymode_set = FALSE;
|
||||||
|
WINED3DDISPLAYMODE Mode;
|
||||||
|
const StaticPixelFormatDesc *formatDesc;
|
||||||
|
|
||||||
TRACE("(%p) : Created Aditional Swap Chain\n", This);
|
TRACE("(%p) : Created Aditional Swap Chain\n", This);
|
||||||
|
|
||||||
@ -1439,10 +1441,12 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic
|
|||||||
return WINED3DERR_NOTAVAILABLE;
|
return WINED3DERR_NOTAVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
object->orig_width = GetSystemMetrics(SM_CXSCREEN);
|
/* Get info on the current display setup */
|
||||||
object->orig_height = GetSystemMetrics(SM_CYSCREEN);
|
IWineD3D_GetAdapterDisplayMode(This->wineD3D, This->adapter->num, &Mode);
|
||||||
object->orig_fmt = pixelformat_for_depth(GetDeviceCaps(hDc, BITSPIXEL) * GetDeviceCaps(hDc, PLANES));
|
object->orig_width = Mode.Width;
|
||||||
ReleaseDC(object->win_handle, hDc);
|
object->orig_height = Mode.Height;
|
||||||
|
object->orig_fmt = Mode.Format;
|
||||||
|
formatDesc = getFormatDescEntry(Mode.Format, NULL, NULL);
|
||||||
|
|
||||||
/** MSDN: If Windowed is TRUE and either of the BackBufferWidth/Height values is zero,
|
/** MSDN: If Windowed is TRUE and either of the BackBufferWidth/Height values is zero,
|
||||||
* then the corresponding dimension of the client area of the hDeviceWindow
|
* then the corresponding dimension of the client area of the hDeviceWindow
|
||||||
@ -1507,14 +1511,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic
|
|||||||
if (!pPresentationParameters->Windowed) {
|
if (!pPresentationParameters->Windowed) {
|
||||||
|
|
||||||
DEVMODEW devmode;
|
DEVMODEW devmode;
|
||||||
HDC hdc;
|
|
||||||
int bpp = 0;
|
int bpp = 0;
|
||||||
RECT clip_rc;
|
RECT clip_rc;
|
||||||
|
|
||||||
/* Get info on the current display setup */
|
bpp = formatDesc->bpp * 8;
|
||||||
hdc = GetDC(0);
|
|
||||||
bpp = GetDeviceCaps(hdc, BITSPIXEL);
|
|
||||||
ReleaseDC(0, hdc);
|
|
||||||
|
|
||||||
/* Change the display settings */
|
/* Change the display settings */
|
||||||
memset(&devmode, 0, sizeof(devmode));
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
@ -1641,23 +1641,16 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic
|
|||||||
error:
|
error:
|
||||||
if (displaymode_set) {
|
if (displaymode_set) {
|
||||||
DEVMODEW devmode;
|
DEVMODEW devmode;
|
||||||
HDC hdc;
|
|
||||||
int bpp = 0;
|
|
||||||
RECT clip_rc;
|
RECT clip_rc;
|
||||||
|
|
||||||
SetRect(&clip_rc, 0, 0, object->orig_width, object->orig_height);
|
SetRect(&clip_rc, 0, 0, object->orig_width, object->orig_height);
|
||||||
ClipCursor(NULL);
|
ClipCursor(NULL);
|
||||||
|
|
||||||
/* Get info on the current display setup */
|
|
||||||
hdc = GetDC(0);
|
|
||||||
bpp = GetDeviceCaps(hdc, BITSPIXEL);
|
|
||||||
ReleaseDC(0, hdc);
|
|
||||||
|
|
||||||
/* Change the display settings */
|
/* Change the display settings */
|
||||||
memset(&devmode, 0, sizeof(devmode));
|
memset(&devmode, 0, sizeof(devmode));
|
||||||
devmode.dmSize = sizeof(devmode);
|
devmode.dmSize = sizeof(devmode);
|
||||||
devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
devmode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
devmode.dmBitsPerPel = (bpp >= 24) ? 32 : bpp; /* Stupid XVidMode cannot change bpp */
|
devmode.dmBitsPerPel = (formatDesc->bpp >= 3) ? 32 : formatDesc->bpp * 8; /* Stupid XVidMode cannot change bpp */
|
||||||
devmode.dmPelsWidth = object->orig_width;
|
devmode.dmPelsWidth = object->orig_width;
|
||||||
devmode.dmPelsHeight = object->orig_height;
|
devmode.dmPelsHeight = object->orig_height;
|
||||||
ChangeDisplaySettingsExW(This->adapter->DeviceName, &devmode, NULL, CDS_FULLSCREEN, NULL);
|
ChangeDisplaySettingsExW(This->adapter->DeviceName, &devmode, NULL, CDS_FULLSCREEN, NULL);
|
||||||
|
@ -2698,7 +2698,7 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
|
|||||||
|
|
||||||
IWineD3DDeviceImpl *object = NULL;
|
IWineD3DDeviceImpl *object = NULL;
|
||||||
IWineD3DImpl *This = (IWineD3DImpl *)iface;
|
IWineD3DImpl *This = (IWineD3DImpl *)iface;
|
||||||
HDC hDC;
|
WINED3DDISPLAYMODE mode;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Validate the adapter number. If no adapters are available(no GL), ignore the adapter
|
/* Validate the adapter number. If no adapters are available(no GL), ignore the adapter
|
||||||
@ -2762,11 +2762,11 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
|
|||||||
object->state = WINED3D_OK;
|
object->state = WINED3D_OK;
|
||||||
|
|
||||||
/* Get the initial screen setup for ddraw */
|
/* Get the initial screen setup for ddraw */
|
||||||
object->ddraw_width = GetSystemMetrics(SM_CXSCREEN);
|
IWineD3DImpl_GetAdapterDisplayMode(iface, Adapter, &mode);
|
||||||
object->ddraw_height = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
hDC = GetDC(0);
|
object->ddraw_width = mode.Width;
|
||||||
object->ddraw_format = pixelformat_for_depth(GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES));
|
object->ddraw_height = mode.Height;
|
||||||
ReleaseDC(0, hDC);
|
object->ddraw_format = mode.Format;
|
||||||
|
|
||||||
for(i = 0; i < PATCHMAP_SIZE; i++) {
|
for(i = 0; i < PATCHMAP_SIZE; i++) {
|
||||||
list_init(&object->patches[i]);
|
list_init(&object->patches[i]);
|
||||||
@ -2933,6 +2933,7 @@ BOOL InitAdapters(void) {
|
|||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
|
||||||
TRACE("Initializing default adapter\n");
|
TRACE("Initializing default adapter\n");
|
||||||
|
Adapters[0].num = 0;
|
||||||
Adapters[0].monitorPoint.x = -1;
|
Adapters[0].monitorPoint.x = -1;
|
||||||
Adapters[0].monitorPoint.y = -1;
|
Adapters[0].monitorPoint.y = -1;
|
||||||
|
|
||||||
|
@ -464,30 +464,14 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *i
|
|||||||
|
|
||||||
static HRESULT WINAPI IWineD3DSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface, WINED3DDISPLAYMODE*pMode) {
|
static HRESULT WINAPI IWineD3DSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface, WINED3DDISPLAYMODE*pMode) {
|
||||||
IWineD3DSwapChainImpl *This = (IWineD3DSwapChainImpl *)iface;
|
IWineD3DSwapChainImpl *This = (IWineD3DSwapChainImpl *)iface;
|
||||||
HDC hdc;
|
HRESULT hr;
|
||||||
int bpp = 0;
|
|
||||||
|
|
||||||
pMode->Width = GetSystemMetrics(SM_CXSCREEN);
|
TRACE("(%p)->(%p): Calling GetAdapterDisplayMode\n", This, pMode);
|
||||||
pMode->Height = GetSystemMetrics(SM_CYSCREEN);
|
hr = IWineD3D_GetAdapterDisplayMode(This->wineD3DDevice->wineD3D, This->wineD3DDevice->adapter->num, pMode);
|
||||||
pMode->RefreshRate = 85; /* FIXME: How to identify? */
|
|
||||||
|
|
||||||
hdc = GetDC(0);
|
|
||||||
bpp = GetDeviceCaps(hdc, BITSPIXEL);
|
|
||||||
ReleaseDC(0, hdc);
|
|
||||||
|
|
||||||
switch (bpp) {
|
|
||||||
case 8: pMode->Format = WINED3DFMT_R8G8B8; break;
|
|
||||||
case 16: pMode->Format = WINED3DFMT_R5G6B5; break;
|
|
||||||
case 24: /*pMode->Format = WINED3DFMT_R8G8B8; break; */ /* 32bpp and 24bpp can be aliased for X */
|
|
||||||
case 32: pMode->Format = WINED3DFMT_A8R8G8B8; break;
|
|
||||||
default:
|
|
||||||
FIXME("Unrecognized display mode format\n");
|
|
||||||
pMode->Format = WINED3DFMT_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
TRACE("(%p) : returning w(%d) h(%d) rr(%d) fmt(%u,%s)\n", This, pMode->Width, pMode->Height, pMode->RefreshRate,
|
TRACE("(%p) : returning w(%d) h(%d) rr(%d) fmt(%u,%s)\n", This, pMode->Width, pMode->Height, pMode->RefreshRate,
|
||||||
pMode->Format, debug_d3dformat(pMode->Format));
|
pMode->Format, debug_d3dformat(pMode->Format));
|
||||||
return WINED3D_OK;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IWineD3DSwapChainImpl_GetDevice(IWineD3DSwapChain *iface, IWineD3DDevice**ppDevice) {
|
static HRESULT WINAPI IWineD3DSwapChainImpl_GetDevice(IWineD3DSwapChain *iface, IWineD3DDevice**ppDevice) {
|
||||||
|
@ -574,6 +574,7 @@ typedef struct WineD3D_PixelFormat
|
|||||||
typedef struct GLPixelFormatDesc GLPixelFormatDesc;
|
typedef struct GLPixelFormatDesc GLPixelFormatDesc;
|
||||||
struct WineD3DAdapter
|
struct WineD3DAdapter
|
||||||
{
|
{
|
||||||
|
UINT num;
|
||||||
POINT monitorPoint;
|
POINT monitorPoint;
|
||||||
WineD3D_GL_Info gl_info;
|
WineD3D_GL_Info gl_info;
|
||||||
const char *driver;
|
const char *driver;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user