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