src/render/direct3d11/SDL_render_d3d11_winrthelpers.cpp
author David Ludwig <dludwig@pobox.com>
Wed, 12 Mar 2014 11:57:15 -0400
changeset 8611 a762dfc67e1a
parent 8608 c5d603f7094e
permissions -rw-r--r--
Fixed various build and runtime errors when using WinRT with VS2012.
dludwig@8608
     1
/*
dludwig@8608
     2
  Simple DirectMedia Layer
dludwig@8608
     3
  Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
dludwig@8608
     4
dludwig@8608
     5
  This software is provided 'as-is', without any express or implied
dludwig@8608
     6
  warranty.  In no event will the authors be held liable for any damages
dludwig@8608
     7
  arising from the use of this software.
dludwig@8608
     8
dludwig@8608
     9
  Permission is granted to anyone to use this software for any purpose,
dludwig@8608
    10
  including commercial applications, and to alter it and redistribute it
dludwig@8608
    11
  freely, subject to the following restrictions:
dludwig@8608
    12
dludwig@8608
    13
  1. The origin of this software must not be misrepresented; you must not
dludwig@8608
    14
     claim that you wrote the original software. If you use this software
dludwig@8608
    15
     in a product, an acknowledgment in the product documentation would be
dludwig@8608
    16
     appreciated but is not required.
dludwig@8608
    17
  2. Altered source versions must be plainly marked as such, and must not be
dludwig@8608
    18
     misrepresented as being the original software.
dludwig@8608
    19
  3. This notice may not be removed or altered from any source distribution.
dludwig@8608
    20
*/
dludwig@8608
    21
#include "../../SDL_internal.h"
dludwig@8608
    22
dludwig@8608
    23
#if SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED
dludwig@8608
    24
dludwig@8608
    25
#include "SDL_syswm.h"
dludwig@8608
    26
extern "C" {
dludwig@8608
    27
#include "../SDL_sysrender.h"
dludwig@8608
    28
}
dludwig@8608
    29
dludwig@8608
    30
#include <windows.ui.core.h>
dludwig@8608
    31
#include <windows.foundation.h>
dludwig@8608
    32
dludwig@8608
    33
#if WINAPI_FAMILY == WINAPI_FAMILY_APP
dludwig@8608
    34
#include <windows.ui.xaml.media.dxinterop.h>
dludwig@8608
    35
#endif
dludwig@8608
    36
dludwig@8608
    37
using namespace Windows::UI::Core;
dludwig@8608
    38
using namespace Windows::Graphics::Display;
dludwig@8608
    39
dludwig@8611
    40
#include <DXGI.h>
dludwig@8611
    41
dludwig@8608
    42
dludwig@8608
    43
extern "C" void *
dludwig@8608
    44
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
dludwig@8608
    45
{
dludwig@8608
    46
    SDL_Window * sdlWindow = renderer->window;
dludwig@8608
    47
    if ( ! renderer->window ) {
dludwig@8608
    48
        return NULL;
dludwig@8608
    49
    }
dludwig@8608
    50
dludwig@8608
    51
    SDL_SysWMinfo sdlWindowInfo;
dludwig@8608
    52
    SDL_VERSION(&sdlWindowInfo.version);
dludwig@8608
    53
    if ( ! SDL_GetWindowWMInfo(sdlWindow, &sdlWindowInfo) ) {
dludwig@8608
    54
        return NULL;
dludwig@8608
    55
    }
dludwig@8608
    56
dludwig@8608
    57
    if (sdlWindowInfo.subsystem != SDL_SYSWM_WINRT) {
dludwig@8608
    58
        return NULL;
dludwig@8608
    59
    }
dludwig@8608
    60
dludwig@8608
    61
    if (!sdlWindowInfo.info.winrt.window) {
dludwig@8608
    62
        return NULL;
dludwig@8608
    63
    }
dludwig@8608
    64
dludwig@8608
    65
    ABI::Windows::UI::Core::ICoreWindow *coreWindow = NULL;
dludwig@8608
    66
    if (FAILED(sdlWindowInfo.info.winrt.window->QueryInterface(&coreWindow))) {
dludwig@8608
    67
        return NULL;
dludwig@8608
    68
    }
dludwig@8608
    69
dludwig@8608
    70
    IUnknown *coreWindowAsIUnknown = NULL;
dludwig@8608
    71
    coreWindow->QueryInterface(&coreWindowAsIUnknown);
dludwig@8608
    72
    coreWindow->Release();
dludwig@8608
    73
dludwig@8608
    74
    return coreWindowAsIUnknown;
dludwig@8608
    75
}
dludwig@8608
    76
dludwig@8608
    77
extern "C" DXGI_MODE_ROTATION
dludwig@8608
    78
D3D11_GetCurrentRotation()
dludwig@8608
    79
{
dludwig@8608
    80
    switch (DisplayProperties::CurrentOrientation) {
dludwig@8608
    81
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
dludwig@8608
    82
        /* Windows Phone rotations */
dludwig@8608
    83
        case DisplayOrientations::Landscape:
dludwig@8608
    84
            return DXGI_MODE_ROTATION_ROTATE90;
dludwig@8608
    85
        case DisplayOrientations::Portrait:
dludwig@8608
    86
            return DXGI_MODE_ROTATION_IDENTITY;
dludwig@8608
    87
        case DisplayOrientations::LandscapeFlipped:
dludwig@8608
    88
            return DXGI_MODE_ROTATION_ROTATE270;
dludwig@8608
    89
        case DisplayOrientations::PortraitFlipped:
dludwig@8608
    90
            return DXGI_MODE_ROTATION_ROTATE180;
dludwig@8608
    91
#else
dludwig@8608
    92
        /* Non-Windows-Phone rotations (ex: Windows 8, Windows RT) */
dludwig@8608
    93
        case DisplayOrientations::Landscape:
dludwig@8608
    94
            return DXGI_MODE_ROTATION_IDENTITY;
dludwig@8608
    95
        case DisplayOrientations::Portrait:
dludwig@8608
    96
            return DXGI_MODE_ROTATION_ROTATE270;
dludwig@8608
    97
        case DisplayOrientations::LandscapeFlipped:
dludwig@8608
    98
            return DXGI_MODE_ROTATION_ROTATE180;
dludwig@8608
    99
        case DisplayOrientations::PortraitFlipped:
dludwig@8608
   100
            return DXGI_MODE_ROTATION_ROTATE90;
dludwig@8608
   101
#endif /* WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP */
dludwig@8608
   102
dludwig@8608
   103
    default:
dludwig@8608
   104
        return DXGI_MODE_ROTATION_UNSPECIFIED;
dludwig@8608
   105
    }
dludwig@8608
   106
}
dludwig@8608
   107
dludwig@8608
   108
dludwig@8608
   109
#endif /* SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED */
dludwig@8608
   110
dludwig@8608
   111
/* vi: set ts=4 sw=4 expandtab: */