src/render/direct3d11/SDL_render_winrt.cpp
author Philipp Wiesemann <philipp.wiesemann@arcor.de>
Sat, 06 Sep 2014 23:20:14 +0200
changeset 9125 e004bdb812ce
parent 8757 aeeeb47a5a77
child 9619 b94b6d0bff0f
permissions -rw-r--r--
Fixed example in header file.

Did not compile because of typo in function name and missing argument.
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@8757
    26
#include "../../video/winrt/SDL_winrtvideo_cpp.h"
dludwig@8608
    27
extern "C" {
dludwig@8608
    28
#include "../SDL_sysrender.h"
dludwig@8608
    29
}
dludwig@8608
    30
dludwig@8608
    31
#include <windows.ui.core.h>
slouken@8609
    32
#include <windows.graphics.display.h>
dludwig@8608
    33
dludwig@8608
    34
#if WINAPI_FAMILY == WINAPI_FAMILY_APP
dludwig@8608
    35
#include <windows.ui.xaml.media.dxinterop.h>
dludwig@8608
    36
#endif
dludwig@8608
    37
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
{
dludwig@8757
    83
    const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation);
dludwig@8621
    84
dludwig@8621
    85
    switch (currentOrientation) {
dludwig@8621
    86
dludwig@8608
    87
#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
slouken@8609
    88
    /* Windows Phone rotations */
slouken@8609
    89
    case DisplayOrientations::Landscape:
slouken@8609
    90
        return DXGI_MODE_ROTATION_ROTATE90;
slouken@8609
    91
    case DisplayOrientations::Portrait:
slouken@8609
    92
        return DXGI_MODE_ROTATION_IDENTITY;
slouken@8609
    93
    case DisplayOrientations::LandscapeFlipped:
slouken@8609
    94
        return DXGI_MODE_ROTATION_ROTATE270;
slouken@8609
    95
    case DisplayOrientations::PortraitFlipped:
slouken@8609
    96
        return DXGI_MODE_ROTATION_ROTATE180;
dludwig@8608
    97
#else
slouken@8609
    98
    /* Non-Windows-Phone rotations (ex: Windows 8, Windows RT) */
slouken@8609
    99
    case DisplayOrientations::Landscape:
slouken@8609
   100
        return DXGI_MODE_ROTATION_IDENTITY;
slouken@8609
   101
    case DisplayOrientations::Portrait:
slouken@8609
   102
        return DXGI_MODE_ROTATION_ROTATE270;
slouken@8609
   103
    case DisplayOrientations::LandscapeFlipped:
slouken@8609
   104
        return DXGI_MODE_ROTATION_ROTATE180;
slouken@8609
   105
    case DisplayOrientations::PortraitFlipped:
slouken@8609
   106
        return DXGI_MODE_ROTATION_ROTATE90;
dludwig@8608
   107
#endif /* WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP */
dludwig@8608
   108
    }
dludwig@8621
   109
slouken@8609
   110
    return DXGI_MODE_ROTATION_IDENTITY;
dludwig@8608
   111
}
dludwig@8608
   112
dludwig@8608
   113
dludwig@8608
   114
#endif /* SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED */
dludwig@8608
   115
dludwig@8608
   116
/* vi: set ts=4 sw=4 expandtab: */