src/render/direct3d11/SDL_render_winrt.cpp
author Sam Lantinga <slouken@libsdl.org>
Wed, 12 Mar 2014 07:26:07 -0700
changeset 8609 d59f0f12bf07
parent 8608 src/render/direct3d11/SDL_render_d3d11_winrthelpers.cpp@c5d603f7094e
child 8612 24d36bb9c7af
permissions -rw-r--r--
Fixed compiling Windows RT code on Visual Studio 2013
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>
slouken@8609
    31
#include <windows.graphics.display.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
slouken@8609
    37
#include "SDL_render_winrt.h"
slouken@8609
    38
slouken@8609
    39
using namespace ABI;
dludwig@8608
    40
using namespace Windows::UI::Core;
dludwig@8608
    41
using namespace Windows::Graphics::Display;
dludwig@8608
    42
dludwig@8608
    43
dludwig@8608
    44
extern "C" void *
dludwig@8608
    45
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
dludwig@8608
    46
{
dludwig@8608
    47
    SDL_Window * sdlWindow = renderer->window;
dludwig@8608
    48
    if ( ! renderer->window ) {
dludwig@8608
    49
        return NULL;
dludwig@8608
    50
    }
dludwig@8608
    51
dludwig@8608
    52
    SDL_SysWMinfo sdlWindowInfo;
dludwig@8608
    53
    SDL_VERSION(&sdlWindowInfo.version);
dludwig@8608
    54
    if ( ! SDL_GetWindowWMInfo(sdlWindow, &sdlWindowInfo) ) {
dludwig@8608
    55
        return NULL;
dludwig@8608
    56
    }
dludwig@8608
    57
dludwig@8608
    58
    if (sdlWindowInfo.subsystem != SDL_SYSWM_WINRT) {
dludwig@8608
    59
        return NULL;
dludwig@8608
    60
    }
dludwig@8608
    61
dludwig@8608
    62
    if (!sdlWindowInfo.info.winrt.window) {
dludwig@8608
    63
        return NULL;
dludwig@8608
    64
    }
dludwig@8608
    65
dludwig@8608
    66
    ABI::Windows::UI::Core::ICoreWindow *coreWindow = NULL;
dludwig@8608
    67
    if (FAILED(sdlWindowInfo.info.winrt.window->QueryInterface(&coreWindow))) {
dludwig@8608
    68
        return NULL;
dludwig@8608
    69
    }
dludwig@8608
    70
dludwig@8608
    71
    IUnknown *coreWindowAsIUnknown = NULL;
dludwig@8608
    72
    coreWindow->QueryInterface(&coreWindowAsIUnknown);
dludwig@8608
    73
    coreWindow->Release();
dludwig@8608
    74
dludwig@8608
    75
    return coreWindowAsIUnknown;
dludwig@8608
    76
}
dludwig@8608
    77
dludwig@8608
    78
extern "C" DXGI_MODE_ROTATION
dludwig@8608
    79
D3D11_GetCurrentRotation()
dludwig@8608
    80
{
slouken@8609
    81
#if 0 /* FIXME: This doesn't compile on Visual Studio 2013 */
dludwig@8608
    82
    switch (DisplayProperties::CurrentOrientation) {
dludwig@8608
    83
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
slouken@8609
    84
    /* Windows Phone rotations */
slouken@8609
    85
    case DisplayOrientations::Landscape:
slouken@8609
    86
        return DXGI_MODE_ROTATION_ROTATE90;
slouken@8609
    87
    case DisplayOrientations::Portrait:
slouken@8609
    88
        return DXGI_MODE_ROTATION_IDENTITY;
slouken@8609
    89
    case DisplayOrientations::LandscapeFlipped:
slouken@8609
    90
        return DXGI_MODE_ROTATION_ROTATE270;
slouken@8609
    91
    case DisplayOrientations::PortraitFlipped:
slouken@8609
    92
        return DXGI_MODE_ROTATION_ROTATE180;
dludwig@8608
    93
#else
slouken@8609
    94
    /* Non-Windows-Phone rotations (ex: Windows 8, Windows RT) */
slouken@8609
    95
    case DisplayOrientations::Landscape:
slouken@8609
    96
        return DXGI_MODE_ROTATION_IDENTITY;
slouken@8609
    97
    case DisplayOrientations::Portrait:
slouken@8609
    98
        return DXGI_MODE_ROTATION_ROTATE270;
slouken@8609
    99
    case DisplayOrientations::LandscapeFlipped:
slouken@8609
   100
        return DXGI_MODE_ROTATION_ROTATE180;
slouken@8609
   101
    case DisplayOrientations::PortraitFlipped:
slouken@8609
   102
        return DXGI_MODE_ROTATION_ROTATE90;
dludwig@8608
   103
#endif /* WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP */
dludwig@8608
   104
    }
slouken@8609
   105
#endif
slouken@8609
   106
    return DXGI_MODE_ROTATION_IDENTITY;
dludwig@8608
   107
}
dludwig@8608
   108
dludwig@8608
   109
dludwig@8608
   110
#endif /* SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED */
dludwig@8608
   111
dludwig@8608
   112
/* vi: set ts=4 sw=4 expandtab: */