Edit

kc3-lang/angle/src/common/NativeWindow.h

Branch :

  • Show log

    Commit

  • Author : Cooper Partin
    Date : 2014-10-08 10:41:56
    Hash : 406a3be9
    Message : Added IInspectable EGLNativeWindowType and ICoreWindow support Change-Id: I9ad82b7819bcca1c05e7aa60dc2baec4a7bc403c Reviewed-on: https://chromium-review.googlesource.com/222360 Tested-by: Cooper Partin <coopp@microsoft.com> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/common/NativeWindow.h
  • //
    // Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // NativeWindow.h: Defines NativeWindow, a class for managing and
    // performing operations on an EGLNativeWindowType.
    // It is used for HWND (Desktop Windows) and IInspectable objects
    //(Windows Store Applications).
    
    #ifndef COMMON_NATIVEWINDOW_H_
    #define COMMON_NATIVEWINDOW_H_
    
    #include <EGL/eglplatform.h>
    #include "common/debug.h"
    #include "common/platform.h"
    
    // DXGISwapChain and DXGIFactory are typedef'd to specific required
    // types. The HWND NativeWindow implementation requires IDXGISwapChain
    // and IDXGIFactory and the Windows Store NativeWindow
    // implementation requires IDXGISwapChain1 and IDXGIFactory2.
    #if defined(ANGLE_ENABLE_WINDOWS_STORE)
    typedef IDXGISwapChain1 DXGISwapChain;
    typedef IDXGIFactory2 DXGIFactory;
    
    #include <wrl.h>
    #include <wrl/wrappers/corewrappers.h>
    #include <windows.applicationmodel.core.h>
    #include <memory>
    
    class IInspectableNativeWindow;
    
    using namespace Microsoft::WRL;
    using namespace Microsoft::WRL::Wrappers;
    
    #else
    typedef IDXGISwapChain DXGISwapChain;
    typedef IDXGIFactory DXGIFactory;
    #endif
    
    namespace rx
    {
    class NativeWindow
    {
    public:
        explicit NativeWindow(EGLNativeWindowType window);
    
        bool initialize();
        bool getClientRect(LPRECT rect);
        bool isIconic();
    
        HRESULT createSwapChain(ID3D11Device* device, DXGIFactory* factory,
                                DXGI_FORMAT format, UINT width, UINT height,
                                DXGISwapChain** swapChain);
    
        inline EGLNativeWindowType getNativeWindow() const { return mWindow; }
    
    private:
        EGLNativeWindowType mWindow;
    
    #if defined(ANGLE_ENABLE_WINDOWS_STORE)
        std::shared_ptr<IInspectableNativeWindow> mImpl;
    #endif
    
    };
    }
    
    bool isValidEGLNativeWindowType(EGLNativeWindowType window);
    
    #endif // COMMON_NATIVEWINDOW_H_