aboutsummaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/hololens/App.xaml7
-rw-r--r--support/hololens/App.xaml.cpp29
-rw-r--r--support/hololens/App.xaml.h21
-rw-r--r--support/hololens/Assets/LockScreenLogo.scale-200.pngbin0 -> 1430 bytes
-rw-r--r--support/hololens/Assets/SplashScreen.scale-200.pngbin0 -> 7700 bytes
-rw-r--r--support/hololens/Assets/Square150x150Logo.scale-200.pngbin0 -> 2937 bytes
-rw-r--r--support/hololens/Assets/Square44x44Logo.scale-200.pngbin0 -> 1647 bytes
-rw-r--r--support/hololens/Assets/Square44x44Logo.targetsize-24_altform-unplated.pngbin0 -> 1255 bytes
-rw-r--r--support/hololens/Assets/StoreLogo.pngbin0 -> 1451 bytes
-rw-r--r--support/hololens/Assets/Wide310x150Logo.scale-200.pngbin0 -> 3204 bytes
-rw-r--r--support/hololens/OpenGLES.cpp232
-rw-r--r--support/hololens/OpenGLES.h27
-rw-r--r--support/hololens/OpenGLESPage.xaml13
-rw-r--r--support/hololens/OpenGLESPage.xaml.cpp154
-rw-r--r--support/hololens/OpenGLESPage.xaml.h37
-rw-r--r--support/hololens/Package.appxmanifest46
-rw-r--r--support/hololens/ProjectDefaultFilters.vcxproj.filters30
-rw-r--r--support/hololens/Servo.cpp83
-rw-r--r--support/hololens/Servo.h31
-rw-r--r--support/hololens/ServoApp.sln43
-rw-r--r--support/hololens/ServoApp.vcxproj436
-rw-r--r--support/hololens/ServoApp.vcxproj.filters245
-rw-r--r--support/hololens/ServoApp_TemporaryKey.pfxbin0 -> 2512 bytes
-rw-r--r--support/hololens/packages.config4
-rw-r--r--support/hololens/pch.cpp5
-rw-r--r--support/hololens/pch.h19
26 files changed, 1462 insertions, 0 deletions
diff --git a/support/hololens/App.xaml b/support/hololens/App.xaml
new file mode 100644
index 00000000000..6385fb4ebc6
--- /dev/null
+++ b/support/hololens/App.xaml
@@ -0,0 +1,7 @@
+<Application
+ x:Class="hlservo.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:hlservo">
+
+</Application>
diff --git a/support/hololens/App.xaml.cpp b/support/hololens/App.xaml.cpp
new file mode 100644
index 00000000000..e084de34b43
--- /dev/null
+++ b/support/hololens/App.xaml.cpp
@@ -0,0 +1,29 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "pch.h"
+#include "App.xaml.h"
+
+using namespace hlservo;
+
+App::App()
+{
+ InitializeComponent();
+}
+
+void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^ e)
+{
+#if _DEBUG
+ if (IsDebuggerPresent()) {
+ DebugSettings->EnableFrameRateCounter = true;
+ }
+#endif
+
+ if (mPage == nullptr) {
+ mPage = ref new OpenGLESPage(&mOpenGLES);
+ }
+
+ Windows::UI::Xaml::Window::Current->Content = mPage;
+ Windows::UI::Xaml::Window::Current->Activate();
+}
diff --git a/support/hololens/App.xaml.h b/support/hololens/App.xaml.h
new file mode 100644
index 00000000000..4c109377d4c
--- /dev/null
+++ b/support/hololens/App.xaml.h
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#pragma once
+
+#include "OpenGLES.h"
+#include "app.g.h"
+#include "openglespage.xaml.h"
+
+namespace hlservo {
+ref class App sealed {
+public:
+ App();
+ virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^ e) override;
+
+private:
+ OpenGLESPage ^ mPage;
+ OpenGLES mOpenGLES;
+};
+}
diff --git a/support/hololens/Assets/LockScreenLogo.scale-200.png b/support/hololens/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 00000000000..735f57adb5d
--- /dev/null
+++ b/support/hololens/Assets/LockScreenLogo.scale-200.png
Binary files differ
diff --git a/support/hololens/Assets/SplashScreen.scale-200.png b/support/hololens/Assets/SplashScreen.scale-200.png
new file mode 100644
index 00000000000..023e7f1feda
--- /dev/null
+++ b/support/hololens/Assets/SplashScreen.scale-200.png
Binary files differ
diff --git a/support/hololens/Assets/Square150x150Logo.scale-200.png b/support/hololens/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 00000000000..af49fec1a54
--- /dev/null
+++ b/support/hololens/Assets/Square150x150Logo.scale-200.png
Binary files differ
diff --git a/support/hololens/Assets/Square44x44Logo.scale-200.png b/support/hololens/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 00000000000..ce342a2ec8a
--- /dev/null
+++ b/support/hololens/Assets/Square44x44Logo.scale-200.png
Binary files differ
diff --git a/support/hololens/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/support/hololens/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 00000000000..f6c02ce97e0
--- /dev/null
+++ b/support/hololens/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
Binary files differ
diff --git a/support/hololens/Assets/StoreLogo.png b/support/hololens/Assets/StoreLogo.png
new file mode 100644
index 00000000000..7385b56c0e4
--- /dev/null
+++ b/support/hololens/Assets/StoreLogo.png
Binary files differ
diff --git a/support/hololens/Assets/Wide310x150Logo.scale-200.png b/support/hololens/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 00000000000..288995b397f
--- /dev/null
+++ b/support/hololens/Assets/Wide310x150Logo.scale-200.png
Binary files differ
diff --git a/support/hololens/OpenGLES.cpp b/support/hololens/OpenGLES.cpp
new file mode 100644
index 00000000000..c217ee4fbd5
--- /dev/null
+++ b/support/hololens/OpenGLES.cpp
@@ -0,0 +1,232 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "pch.h"
+#include "OpenGLES.h"
+
+using namespace Platform;
+using namespace Windows::UI::Xaml::Controls;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+
+OpenGLES::OpenGLES()
+ : mEglConfig(nullptr)
+ , mEglDisplay(EGL_NO_DISPLAY)
+ , mEglContext(EGL_NO_CONTEXT)
+{
+ Initialize();
+}
+
+OpenGLES::~OpenGLES()
+{
+ Cleanup();
+}
+
+void OpenGLES::Initialize()
+{
+ const EGLint configAttributes[] = {
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 8,
+ EGL_DEPTH_SIZE, 24,
+ EGL_STENCIL_SIZE, 8,
+ EGL_NONE
+ };
+
+ const EGLint contextAttributes[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 3,
+ EGL_NONE
+ };
+
+ // Based on Angle MS template.
+
+ const EGLint defaultDisplayAttributes[] = {
+ // These are the default display attributes, used to request ANGLE's D3D11 renderer.
+ // eglInitialize will only succeed with these attributes if the hardware supports D3D11 Feature Level 10_0+.
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
+
+ // EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER is an optimization that can have large performance benefits on
+ // mobile devices. Its syntax is subject to change, though. Please update your Visual Studio templates if you
+ // experience compilation issues with it.
+ EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER,
+ EGL_TRUE,
+
+ // EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE is an option that enables ANGLE to automatically call
+ // the IDXGIDevice3::Trim method on behalf of the application when it gets suspended.
+ // Calling IDXGIDevice3::Trim when an application is suspended is a Windows Store application certification
+ // requirement.
+ EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE,
+ EGL_TRUE,
+ EGL_NONE,
+ };
+
+ const EGLint fl9_3DisplayAttributes[] = {
+ // These can be used to request ANGLE's D3D11 renderer, with D3D11 Feature Level 9_3.
+ // These attributes are used if the call to eglInitialize fails with the default display attributes.
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
+ EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE,
+ 9,
+ EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE,
+ 3,
+ EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER,
+ EGL_TRUE,
+ EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE,
+ EGL_TRUE,
+ EGL_NONE,
+ };
+
+ const EGLint warpDisplayAttributes[] = {
+ // These attributes can be used to request D3D11 WARP.
+ // They are used if eglInitialize fails with both the default display attributes and the 9_3 display attributes.
+ EGL_PLATFORM_ANGLE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE,
+ EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
+ EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE,
+ EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER,
+ EGL_TRUE,
+ EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE,
+ EGL_TRUE,
+ EGL_NONE,
+ };
+
+ EGLConfig config = NULL;
+
+ // eglGetPlatformDisplayEXT is an alternative to eglGetDisplay.
+ // It allows us to pass in display attributes, used to configure D3D11.
+ PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT =
+ reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC>(eglGetProcAddress("eglGetPlatformDisplayEXT"));
+ if (!eglGetPlatformDisplayEXT) {
+ throw Exception::CreateException(E_FAIL, L"Failed to get function eglGetPlatformDisplayEXT");
+ }
+
+ //
+ // To initialize the display, we make three sets of calls to eglGetPlatformDisplayEXT and eglInitialize,
+ // with varying parameters passed to eglGetPlatformDisplayEXT:
+ // 1) The first calls uses "defaultDisplayAttributes" as a parameter. This corresponds to D3D11 Feature Level 10_0+.
+ // 2) If eglInitialize fails for step 1 (e.g. because 10_0+ isn't supported by the default GPU), then we try again
+ // using "fl9_3DisplayAttributes". This corresponds to D3D11 Feature Level 9_3.
+ // 3) If eglInitialize fails for step 2 (e.g. because 9_3+ isn't supported by the default GPU), then we try again
+ // using "warpDisplayAttributes". This corresponds to D3D11 Feature Level 11_0 on WARP, a D3D11 software
+ // rasterizer.
+ //
+
+ // This tries to initialize EGL to D3D11 Feature Level 10_0+. See above comment for details.
+ mEglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, defaultDisplayAttributes);
+ if (mEglDisplay == EGL_NO_DISPLAY) {
+ throw Exception::CreateException(E_FAIL, L"Failed to get EGL display");
+ }
+
+ if (eglInitialize(mEglDisplay, NULL, NULL) == EGL_FALSE) {
+ // This tries to initialize EGL to D3D11 Feature Level 9_3, if 10_0+ is unavailable (e.g. on some mobile
+ // devices).
+ mEglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, fl9_3DisplayAttributes);
+ if (mEglDisplay == EGL_NO_DISPLAY) {
+ throw Exception::CreateException(E_FAIL, L"Failed to get EGL display");
+ }
+
+ if (eglInitialize(mEglDisplay, NULL, NULL) == EGL_FALSE) {
+ // This initializes EGL to D3D11 Feature Level 11_0 on WARP, if 9_3+ is unavailable on the default GPU.
+ mEglDisplay = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY,
+ warpDisplayAttributes);
+ if (mEglDisplay == EGL_NO_DISPLAY) {
+ throw Exception::CreateException(E_FAIL, L"Failed to get EGL display");
+ }
+
+ if (eglInitialize(mEglDisplay, NULL, NULL) == EGL_FALSE) {
+ // If all of the calls to eglInitialize returned EGL_FALSE then an error has occurred.
+ throw Exception::CreateException(E_FAIL, L"Failed to initialize EGL");
+ }
+ }
+ }
+
+ EGLint numConfigs = 0;
+ if ((eglChooseConfig(mEglDisplay, configAttributes, &mEglConfig, 1, &numConfigs) == EGL_FALSE) ||
+ (numConfigs == 0)) {
+ throw Exception::CreateException(E_FAIL, L"Failed to choose first EGLConfig");
+ }
+
+ mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, contextAttributes);
+ if (mEglContext == EGL_NO_CONTEXT) {
+ throw Exception::CreateException(E_FAIL, L"Failed to create EGL context");
+ }
+}
+
+void OpenGLES::Cleanup()
+{
+ if (mEglDisplay != EGL_NO_DISPLAY && mEglContext != EGL_NO_CONTEXT) {
+ eglDestroyContext(mEglDisplay, mEglContext);
+ mEglContext = EGL_NO_CONTEXT;
+ }
+
+ if (mEglDisplay != EGL_NO_DISPLAY) {
+ eglTerminate(mEglDisplay);
+ mEglDisplay = EGL_NO_DISPLAY;
+ }
+}
+
+void OpenGLES::Reset()
+{
+ Cleanup();
+ Initialize();
+}
+
+EGLSurface OpenGLES::CreateSurface(SwapChainPanel ^ panel)
+{
+ if (!panel) {
+ throw Exception::CreateException(E_INVALIDARG, L"SwapChainPanel parameter is invalid");
+ }
+
+ EGLSurface surface = EGL_NO_SURFACE;
+
+ const EGLint surfaceAttributes[] = {
+ EGL_ANGLE_SURFACE_RENDER_TO_BACK_BUFFER, EGL_TRUE,
+ EGL_NONE
+ };
+
+ PropertySet ^ surfaceCreationProperties = ref new PropertySet();
+ surfaceCreationProperties->Insert(ref new String(EGLNativeWindowTypeProperty), panel);
+
+ // How to set size and or scale:
+ // surfaceCreationProperties->Insert(ref new String(EGLRenderSurfaceSizeProperty),
+ // PropertyValue::CreateSize(*renderSurfaceSize));
+ // surfaceCreationProperties->Insert(ref new String(EGLRenderResolutionScaleProperty),
+ // PropertyValue::CreateSingle(*resolutionScale));
+
+ surface = eglCreateWindowSurface(mEglDisplay, mEglConfig,
+ reinterpret_cast<IInspectable*>(surfaceCreationProperties), surfaceAttributes);
+ if (surface == EGL_NO_SURFACE) {
+ throw Exception::CreateException(E_FAIL, L"Failed to create EGL surface");
+ }
+
+ return surface;
+}
+
+void OpenGLES::GetSurfaceDimensions(const EGLSurface surface, EGLint* width, EGLint* height)
+{
+ eglQuerySurface(mEglDisplay, surface, EGL_WIDTH, width);
+ eglQuerySurface(mEglDisplay, surface, EGL_HEIGHT, height);
+}
+
+void OpenGLES::DestroySurface(const EGLSurface surface)
+{
+ if (mEglDisplay != EGL_NO_DISPLAY && surface != EGL_NO_SURFACE) {
+ eglDestroySurface(mEglDisplay, surface);
+ }
+}
+
+void OpenGLES::MakeCurrent(const EGLSurface surface)
+{
+ if (eglMakeCurrent(mEglDisplay, surface, surface, mEglContext) == EGL_FALSE) {
+ throw Exception::CreateException(E_FAIL, L"Failed to make EGLSurface current");
+ }
+}
+
+EGLBoolean OpenGLES::SwapBuffers(const EGLSurface surface)
+{
+ return (eglSwapBuffers(mEglDisplay, surface));
+}
diff --git a/support/hololens/OpenGLES.h b/support/hololens/OpenGLES.h
new file mode 100644
index 00000000000..9938e7a0c9c
--- /dev/null
+++ b/support/hololens/OpenGLES.h
@@ -0,0 +1,27 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#pragma once
+
+class OpenGLES {
+public:
+ OpenGLES();
+ ~OpenGLES();
+
+ EGLSurface CreateSurface(Windows::UI::Xaml::Controls::SwapChainPanel ^ panel);
+ void GetSurfaceDimensions(const EGLSurface surface, EGLint* width, EGLint* height);
+ void DestroySurface(const EGLSurface surface);
+ void MakeCurrent(const EGLSurface surface);
+ EGLBoolean SwapBuffers(const EGLSurface surface);
+ void Reset();
+
+private:
+ void Initialize();
+ void Cleanup();
+
+private:
+ EGLDisplay mEglDisplay;
+ EGLContext mEglContext;
+ EGLConfig mEglConfig;
+};
diff --git a/support/hololens/OpenGLESPage.xaml b/support/hololens/OpenGLESPage.xaml
new file mode 100644
index 00000000000..4816b37fa08
--- /dev/null
+++ b/support/hololens/OpenGLESPage.xaml
@@ -0,0 +1,13 @@
+<Page
+ x:Class="hlservo.OpenGLESPage"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="using:hlservo"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ mc:Ignorable="d">
+
+ <SwapChainPanel x:Name="swapChainPanel">
+ <TextBlock Text="OpenGL ES and XAML" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30" />
+ </SwapChainPanel>
+</Page>
diff --git a/support/hololens/OpenGLESPage.xaml.cpp b/support/hololens/OpenGLESPage.xaml.cpp
new file mode 100644
index 00000000000..c4c7dd21e3a
--- /dev/null
+++ b/support/hololens/OpenGLESPage.xaml.cpp
@@ -0,0 +1,154 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "pch.h"
+#include "OpenGLESPage.xaml.h"
+#include "Servo.h"
+
+using namespace hlservo;
+using namespace Platform;
+using namespace Concurrency;
+using namespace Windows::Foundation;
+
+static char sWakeupEvent[] = "SIGNAL_WAKEUP";
+
+OpenGLESPage::OpenGLESPage()
+ : OpenGLESPage(nullptr)
+{
+}
+
+OpenGLESPage::OpenGLESPage(OpenGLES* openGLES)
+ : mOpenGLES(openGLES)
+ , mRenderSurface(EGL_NO_SURFACE)
+{
+ InitializeComponent();
+ Windows::UI::Core::CoreWindow ^ window = Windows::UI::Xaml::Window::Current->CoreWindow;
+ window->VisibilityChanged += ref new Windows::Foundation::TypedEventHandler<Windows::UI::Core::CoreWindow ^,
+ Windows::UI::Core::VisibilityChangedEventArgs ^>(this, &OpenGLESPage::OnVisibilityChanged);
+ this->Loaded += ref new Windows::UI::Xaml::RoutedEventHandler(this, &OpenGLESPage::OnPageLoaded);
+}
+
+OpenGLESPage::~OpenGLESPage()
+{
+ StopRenderLoop();
+ DestroyRenderSurface();
+}
+
+void OpenGLESPage::OnPageLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e)
+{
+ CreateRenderSurface();
+ StartRenderLoop();
+}
+
+void OpenGLESPage::OnVisibilityChanged(Windows::UI::Core::CoreWindow ^ sender,
+ Windows::UI::Core::VisibilityChangedEventArgs ^ args)
+{
+ if (args->Visible && mRenderSurface != EGL_NO_SURFACE) {
+ StartRenderLoop();
+ } else {
+ StopRenderLoop();
+ }
+}
+
+void OpenGLESPage::CreateRenderSurface()
+{
+ if (mOpenGLES && mRenderSurface == EGL_NO_SURFACE) {
+ mRenderSurface = mOpenGLES->CreateSurface(swapChainPanel);
+ }
+}
+
+void OpenGLESPage::DestroyRenderSurface()
+{
+ if (mOpenGLES) {
+ mOpenGLES->DestroySurface(mRenderSurface);
+ }
+ mRenderSurface = EGL_NO_SURFACE;
+}
+
+void OpenGLESPage::RecoverFromLostDevice()
+{
+ StopRenderLoop();
+ {
+ critical_section::scoped_lock lock(mRenderSurfaceCriticalSection);
+
+ DestroyRenderSurface();
+ mOpenGLES->Reset();
+ CreateRenderSurface();
+ }
+ StartRenderLoop();
+}
+
+void OpenGLESPage::StartRenderLoop()
+{
+ if (mRenderLoopWorker != nullptr && mRenderLoopWorker->Status == Windows::Foundation::AsyncStatus::Started) {
+ return;
+ }
+
+ auto loop = [this](Windows::Foundation::IAsyncAction ^ action) {
+ critical_section::scoped_lock lock(mRenderSurfaceCriticalSection);
+
+ HANDLE hEvent = ::CreateEventA(nullptr, FALSE, FALSE, sWakeupEvent);
+
+ // Called by Servo
+ Servo::sMakeCurrent = [this]() {
+ /* EGLint panelWidth = 0; */
+ /* EGLint panelHeight = 0; */
+ /* mOpenGLES->GetSurfaceDimensions(mRenderSurface, &panelWidth, &panelHeight); */
+ /* glViewport(0, 0, panelWidth, panelHeight); */
+ /* mServo->SetSize(panelWidth, panelHeight); */
+ mOpenGLES->MakeCurrent(mRenderSurface);
+ };
+
+ // Called by Servo
+ Servo::sFlush = [this]() {
+ if (mOpenGLES->SwapBuffers(mRenderSurface) != GL_TRUE) {
+ // The call to eglSwapBuffers might not be successful (i.e. due to Device Lost)
+ // If the call fails, then we must reinitialize EGL and the GL resources.
+ swapChainPanel->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::High,
+ ref new Windows::UI::Core::DispatchedHandler([=]() {
+ RecoverFromLostDevice();
+ }, CallbackContext::Any));
+ }
+ };
+
+ mOpenGLES->MakeCurrent(mRenderSurface);
+
+ EGLint panelWidth = 0;
+ EGLint panelHeight = 0;
+ mOpenGLES->GetSurfaceDimensions(mRenderSurface, &panelWidth, &panelHeight);
+ glViewport(0, 0, panelWidth, panelHeight);
+ mServo = new Servo(panelWidth, panelHeight);
+
+ while (action->Status == Windows::Foundation::AsyncStatus::Started) {
+ // Block until Servo::sWakeUp is called.
+ // Or run full speed if animating (see on_animating_changed),
+ // it will endup blocking on SwapBuffers to limit rendering to 60FPS
+ if (!Servo::sAnimating) {
+ ::WaitForSingleObject(hEvent, INFINITE);
+ }
+ mServo->PerformUpdates();
+ }
+ };
+
+ auto workItemHandler = ref new Windows::System::Threading::WorkItemHandler(loop);
+
+ // Run Servo task in a high priority background thread.
+ mRenderLoopWorker = Windows::System::Threading::ThreadPool::RunAsync(
+ workItemHandler,
+ Windows::System::Threading::WorkItemPriority::High,
+ Windows::System::Threading::WorkItemOptions::TimeSliced);
+
+ Servo::sWakeUp = []() {
+ HANDLE hEvent = ::OpenEventA(EVENT_ALL_ACCESS, FALSE, sWakeupEvent);
+ ::SetEvent(hEvent);
+ };
+}
+
+void OpenGLESPage::StopRenderLoop()
+{
+ if (mRenderLoopWorker) {
+ mRenderLoopWorker->Cancel();
+ mRenderLoopWorker = nullptr;
+ }
+}
diff --git a/support/hololens/OpenGLESPage.xaml.h b/support/hololens/OpenGLESPage.xaml.h
new file mode 100644
index 00000000000..ab2c8c2fd80
--- /dev/null
+++ b/support/hololens/OpenGLESPage.xaml.h
@@ -0,0 +1,37 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#pragma once
+
+#include "OpenGLES.h"
+#include "OpenGLESPage.g.h"
+#include "Servo.h"
+
+namespace hlservo {
+public
+ref class OpenGLESPage sealed {
+public:
+ OpenGLESPage();
+ virtual ~OpenGLESPage();
+
+ internal : OpenGLESPage(OpenGLES* openGLES);
+
+private:
+ void OnPageLoaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e);
+ void OnVisibilityChanged(Windows::UI::Core::CoreWindow ^ sender,
+ Windows::UI::Core::VisibilityChangedEventArgs ^ args);
+ void CreateRenderSurface();
+ void DestroyRenderSurface();
+ void RecoverFromLostDevice();
+ void StartRenderLoop();
+ void StopRenderLoop();
+
+ OpenGLES* mOpenGLES;
+
+ EGLSurface mRenderSurface;
+ Concurrency::critical_section mRenderSurfaceCriticalSection;
+ Windows::Foundation::IAsyncAction ^ mRenderLoopWorker;
+ Servo* mServo;
+};
+}
diff --git a/support/hololens/Package.appxmanifest b/support/hololens/Package.appxmanifest
new file mode 100644
index 00000000000..3c02095da93
--- /dev/null
+++ b/support/hololens/Package.appxmanifest
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<Package
+ xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
+ xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
+ xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
+ IgnorableNamespaces="uap mp">
+
+ <Identity Publisher="CN=allizom" Version="1.0.23.0" Name="ServoApp"/>
+
+ <mp:PhoneIdentity PhoneProductId="763af792-8716-4528-af46-5e364a20e6aa" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
+
+ <Properties>
+ <DisplayName>Servo</DisplayName>
+ <PublisherDisplayName>Allizom</PublisherDisplayName>
+ <Logo>Assets\StoreLogo.png</Logo>
+ </Properties>
+
+ <Dependencies>
+ <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
+ </Dependencies>
+
+ <Resources>
+ <Resource Language="x-generate"/>
+ </Resources>
+
+ <Applications>
+ <Application Id="App"
+ Executable="$targetnametoken$.exe"
+ EntryPoint="hlservo.App">
+ <uap:VisualElements
+ DisplayName="hlservo"
+ Square150x150Logo="Assets\Square150x150Logo.png"
+ Square44x44Logo="Assets\Square44x44Logo.png"
+ Description="hlservo"
+ BackgroundColor="transparent">
+ <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
+ <uap:SplashScreen Image="Assets\SplashScreen.png" />
+ </uap:VisualElements>
+ </Application>
+ </Applications>
+
+ <Capabilities>
+ <Capability Name="internetClient" />
+ </Capabilities>
+</Package>
diff --git a/support/hololens/ProjectDefaultFilters.vcxproj.filters b/support/hololens/ProjectDefaultFilters.vcxproj.filters
new file mode 100644
index 00000000000..51a658ed151
--- /dev/null
+++ b/support/hololens/ProjectDefaultFilters.vcxproj.filters
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Assets">
+ <UniqueIdentifier>d64db011-1240-48ad-a857-7af0ffd781dc</UniqueIdentifier>
+ <Extensions>bmp;fbx;gif;jpg;jpeg;tga;tiff;tif;png</Extensions>
+ </Filter>
+ <Filter Include="Binaries">
+ <Extensions>dll;</Extensions>
+ </Filter>
+ <Image Include="Assets\LockScreenLogo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\SplashScreen.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square150x150Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square44x44Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Wide310x150Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ </ItemGroup>
+</Project>
diff --git a/support/hololens/Servo.cpp b/support/hololens/Servo.cpp
new file mode 100644
index 00000000000..1cbaba0fe55
--- /dev/null
+++ b/support/hololens/Servo.cpp
@@ -0,0 +1,83 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "pch.h"
+#include "Servo.h"
+
+extern "C" {
+#include <simpleservo.h>
+}
+
+using namespace hlservo;
+
+void on_load_started() {}
+void on_load_ended() {}
+void on_title_changed(const char* title) {}
+void on_url_changed(const char* url) {}
+void on_history_changed(bool back, bool fwd) {}
+void on_shutdown_complete() {}
+
+std::function<void()> Servo::sFlush = [](){};
+std::function<void()> Servo::sMakeCurrent = [](){};
+std::function<void()> Servo::sWakeUp = [](){};
+bool Servo::sAnimating = false;
+
+void flush() {
+ Servo::sFlush();
+}
+
+void make_current() {
+ Servo::sMakeCurrent();
+}
+
+void wakeup() {
+ Servo::sWakeUp();
+}
+
+void on_animating_changed(bool aAnimating) {
+ Servo::sAnimating = aAnimating;
+}
+
+Servo::Servo(GLsizei width, GLsizei height)
+ : mAnimating(false)
+ , mWindowHeight(height)
+ , mWindowWidth(width) {
+
+ CInitOptions o;
+ o.args = NULL;
+ o.url = "http://example.com";
+ o.width = mWindowWidth;
+ o.height = mWindowHeight;
+ o.density = 1.0;
+ o.enable_subpixel_text_antialiasing = false;
+
+ CHostCallbacks c;
+ c.flush = &flush;
+ c.make_current = &make_current;
+ c.on_load_started = &on_load_started;
+ c.on_load_ended = &on_load_ended;
+ c.on_title_changed = &on_title_changed;
+ c.on_url_changed = &on_url_changed;
+ c.on_history_changed = &on_history_changed;
+ c.on_animating_changed = &on_animating_changed;
+ c.on_shutdown_complete = &on_shutdown_complete;
+
+ init_with_egl(o, &wakeup, c);
+}
+
+Servo::~Servo() {
+ deinit();
+}
+
+void Servo::PerformUpdates() {
+ perform_updates();
+}
+
+void Servo::SetSize(GLsizei width, GLsizei height) {
+ if (width != mWindowWidth || height != mWindowHeight) {
+ mWindowWidth = width;
+ mWindowHeight = height;
+ resize(mWindowWidth, mWindowHeight);
+ }
+}
diff --git a/support/hololens/Servo.h b/support/hololens/Servo.h
new file mode 100644
index 00000000000..e88eafcae0a
--- /dev/null
+++ b/support/hololens/Servo.h
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#pragma once
+
+#include "pch.h"
+
+namespace hlservo {
+class Servo {
+public:
+ Servo(GLsizei width, GLsizei height);
+ ~Servo();
+ void PerformUpdates();
+ void SetSize(GLsizei width, GLsizei height);
+
+ // Static lambas called by Servo callbacks.
+
+ // Will be called from any thead
+ static std::function<void()> sWakeUp;
+ // Will be called from GL thread
+ static std::function<void()> sFlush;
+ static std::function<void()> sMakeCurrent;
+ static bool sAnimating;
+
+private:
+ GLsizei mWindowWidth;
+ GLsizei mWindowHeight;
+ bool mAnimating;
+};
+}
diff --git a/support/hololens/ServoApp.sln b/support/hololens/ServoApp.sln
new file mode 100644
index 00000000000..35fc54c426d
--- /dev/null
+++ b/support/hololens/ServoApp.sln
@@ -0,0 +1,43 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28803.352
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ServoApp", "ServoApp.vcxproj", "{7134432A-49F2-4DC7-8F72-06F873A683EC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|ARM = Debug|ARM
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|ARM = Release|ARM
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|ARM.ActiveCfg = Debug|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|ARM.Build.0 = Debug|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|ARM.Deploy.0 = Debug|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x64.ActiveCfg = Debug|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x64.Build.0 = Debug|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x64.Deploy.0 = Debug|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x86.ActiveCfg = Debug|Win32
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x86.Build.0 = Debug|Win32
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Debug|x86.Deploy.0 = Debug|Win32
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|ARM.ActiveCfg = Release|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|ARM.Build.0 = Release|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|ARM.Deploy.0 = Release|ARM
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x64.ActiveCfg = Release|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x64.Build.0 = Release|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x64.Deploy.0 = Release|x64
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x86.ActiveCfg = Release|Win32
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x86.Build.0 = Release|Win32
+ {7134432A-49F2-4DC7-8F72-06F873A683EC}.Release|x86.Deploy.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {58EFB63D-FFA2-4263-AE6A-6764E4E04CCA}
+ EndGlobalSection
+EndGlobal
diff --git a/support/hololens/ServoApp.vcxproj b/support/hololens/ServoApp.vcxproj
new file mode 100644
index 00000000000..09ff575368a
--- /dev/null
+++ b/support/hololens/ServoApp.vcxproj
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{7134432a-49f2-4dc7-8f72-06f873a683ec}</ProjectGuid>
+ <RootNamespace>hlservo</RootNamespace>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+ <AppContainerApplication>true</AppContainerApplication>
+ <ApplicationType>Windows Store</ApplicationType>
+ <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformMinVersion>10.0.17763.0</WindowsTargetPlatformMinVersion>
+ <ProjectName>ServoApp</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets" Condition="Exists('packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets')" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <PackageCertificateThumbprint>14E8C17B8F0E474455725DAA105238215838FEB1</PackageCertificateThumbprint>
+ <PackageCertificateKeyFile>ServoApp_TemporaryKey.pfx</PackageCertificateKeyFile>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Platform)'=='ARM'">
+ <Link>
+ <AdditionalDependencies>incore.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store\arm; $(VCInstallDir)\lib\arm</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Platform)'=='Win32'">
+ <Link>
+ <AdditionalDependencies>mincore.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories); $(VCInstallDir)\lib\store; $(VCInstallDir)\lib</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Platform)|$(Configuration)'=='x64|Debug'">
+ <Link>
+ <AdditionalDependencies>mincore.lib;simpleservo.dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64;$(ProjectDir)\..\..\target\debug</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Platform)|$(Configuration)'=='x64|Release'">
+ <Link>
+ <AdditionalDependencies>mincore.lib;simpleservo.dll.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(VCInstallDir)\lib\store\amd64;$(VCInstallDir)\lib\amd64;$(ProjectDir)\..\..\target\release</AdditionalLibraryDirectories>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
+ <ClCompile>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalIncludeDirectories>$(ProjectDir)\..\..\target\debug\;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
+ <ClCompile>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalIncludeDirectories>$(ProjectDir)\..\..\target\release\;$(ProjectDir);$(IntermediateOutputPath);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>4453;28204</DisableSpecificWarnings>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <Image Include="Assets\LockScreenLogo.scale-200.png" />
+ <Image Include="Assets\SplashScreen.scale-200.png" />
+ <Image Include="Assets\Square150x150Logo.scale-200.png" />
+ <Image Include="Assets\Square44x44Logo.scale-200.png" />
+ <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
+ <Image Include="Assets\StoreLogo.png" />
+ <Image Include="Assets\Wide310x150Logo.scale-200.png" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="Servo.cpp" />
+ <ClInclude Include="Servo.h" />
+ <ClCompile Include="$(MSBuildThisFileDirectory)OpenGLES.cpp" />
+ <ClInclude Include="$(MSBuildThisFileDirectory)OpenGLES.h" />
+ <ClInclude Include="$(MSBuildThisFileDirectory)pch.h" />
+ <ClCompile Include="$(MSBuildThisFileDirectory)pch.cpp">
+ <PrecompiledHeader>Create</PrecompiledHeader>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="App.xaml.h">
+ <DependentUpon>App.xaml</DependentUpon>
+ </ClInclude>
+ <ClInclude Include="OpenGLESPage.xaml.h">
+ <DependentUpon>OpenGLESPage.xaml</DependentUpon>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="App.xaml.cpp">
+ <DependentUpon>App.xaml</DependentUpon>
+ </ClCompile>
+ <ClCompile Include="OpenGLESPage.xaml.cpp">
+ <DependentUpon>OpenGLESPage.xaml</DependentUpon>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <AppxManifest Include="Package.appxmanifest">
+ <SubType>Designer</SubType>
+ </AppxManifest>
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <SubType>Designer</SubType>
+ </ApplicationDefinition>
+ <Page Include="OpenGLESPage.xaml">
+ <SubType>Designer</SubType>
+ </Page>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\..\target\debug\api-ms-win-crt-runtime-l1-1-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\ffi-7.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gio-2.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\glib-2.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gmodule-2.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gobject-2.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstapp-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstaudio-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstbase-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstgl-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstpbutils-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstplayer-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstreamer-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstrtp-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstsdp-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gsttag-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstvideo-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\gstwebrtc-1.0-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\intl-8.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\libeay32.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\libwinpthread-1.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\msvcp140.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\orc-0.4-0.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\simpleservo.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\ssleay32.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\vcruntime140.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\debug\z-1.dll">
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DeploymentContent>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\..\target\release\api-ms-win-crt-runtime-l1-1-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\ffi-7.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gio-2.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\glib-2.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gmodule-2.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gobject-2.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstapp-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstaudio-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstbase-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstgl-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstpbutils-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstplayer-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstreamer-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstrtp-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstsdp-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gsttag-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstvideo-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\gstwebrtc-1.0-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\intl-8.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\libeay32.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\libwinpthread-1.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\msvcp140.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\orc-0.4-0.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\simpleservo.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\ssleay32.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\vcruntime140.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="..\..\target\release\z-1.dll">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DeploymentContent>
+ <DeploymentContent Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</DeploymentContent>
+ </None>
+ <None Include="packages.config" />
+ <None Include="ServoApp_TemporaryKey.pfx" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets')" Text="$([System.String]::Format('$(ErrorText)', 'packages\ANGLE.WindowsStore.2.1.13\build\native\ANGLE.WindowsStore.targets'))" />
+ </Target>
+</Project>
diff --git a/support/hololens/ServoApp.vcxproj.filters b/support/hololens/ServoApp.vcxproj.filters
new file mode 100644
index 00000000000..13b7c033ae1
--- /dev/null
+++ b/support/hololens/ServoApp.vcxproj.filters
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(MSBuildThisFileDirectory)OpenGLES.cpp">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="$(MSBuildThisFileDirectory)pch.cpp">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="Servo.cpp">
+ <Filter>src</Filter>
+ </ClCompile>
+ <ClCompile Include="App.xaml.cpp" />
+ <ClCompile Include="OpenGLESPage.xaml.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="$(MSBuildThisFileDirectory)OpenGLES.h">
+ <Filter>src</Filter>
+ </ClInclude>
+ <ClInclude Include="$(MSBuildThisFileDirectory)pch.h">
+ <Filter>src</Filter>
+ </ClInclude>
+ <ClInclude Include="Servo.h">
+ <Filter>src</Filter>
+ </ClInclude>
+ <ClInclude Include="App.xaml.h" />
+ <ClInclude Include="OpenGLESPage.xaml.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <Image Include="Assets\SplashScreen.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square44x44Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Square150x150Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\StoreLogo.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\Wide310x150Logo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ <Image Include="Assets\LockScreenLogo.scale-200.png">
+ <Filter>Assets</Filter>
+ </Image>
+ </ItemGroup>
+ <ItemGroup>
+ <AppxManifest Include="Package.appxmanifest" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="ServoApp_TemporaryKey.pfx" />
+ <None Include="packages.config" />
+ <None Include="..\..\target\debug\api-ms-win-crt-runtime-l1-1-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\ffi-7.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gio-2.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\glib-2.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gmodule-2.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gobject-2.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstapp-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstaudio-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstbase-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstgl-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstpbutils-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstplayer-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstreamer-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstrtp-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstsdp-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gsttag-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstvideo-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\gstwebrtc-1.0-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\intl-8.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\libeay32.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\libwinpthread-1.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\msvcp140.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\orc-0.4-0.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\simpleservo.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\ssleay32.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\vcruntime140.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\debug\z-1.dll">
+ <Filter>ServoDLLsDebug</Filter>
+ </None>
+ <None Include="..\..\target\release\z-1.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\vcruntime140.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\ssleay32.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\simpleservo.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\orc-0.4-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\msvcp140.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\libwinpthread-1.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\libeay32.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\intl-8.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstwebrtc-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstvideo-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gsttag-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstsdp-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstrtp-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstreamer-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstplayer-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstpbutils-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstgl-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstbase-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstaudio-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gstapp-1.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gobject-2.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gmodule-2.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\glib-2.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\gio-2.0-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\ffi-7.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ <None Include="..\..\target\release\api-ms-win-crt-runtime-l1-1-0.dll">
+ <Filter>ServoDLLsRelease</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Filter Include="Assets">
+ <UniqueIdentifier>{f663883d-5302-4e09-82e3-094b0a4fa9bc}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src">
+ <UniqueIdentifier>{45140811-c74b-4497-ba07-a7610fe2fef9}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="ServoDLLsDebug">
+ <UniqueIdentifier>{851a4628-484c-4859-bb9b-3153914487f5}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="ServoDLLsRelease">
+ <UniqueIdentifier>{96a56d11-301b-46ec-b081-50010b467ebf}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ApplicationDefinition Include="App.xaml">
+ <Filter>src</Filter>
+ </ApplicationDefinition>
+ </ItemGroup>
+ <ItemGroup>
+ <Page Include="OpenGLESPage.xaml">
+ <Filter>src</Filter>
+ </Page>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/support/hololens/ServoApp_TemporaryKey.pfx b/support/hololens/ServoApp_TemporaryKey.pfx
new file mode 100644
index 00000000000..81aa780ceeb
--- /dev/null
+++ b/support/hololens/ServoApp_TemporaryKey.pfx
Binary files differ
diff --git a/support/hololens/packages.config b/support/hololens/packages.config
new file mode 100644
index 00000000000..70c3dea0e70
--- /dev/null
+++ b/support/hololens/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="ANGLE.WindowsStore" version="2.1.13" targetFramework="native" />
+</packages> \ No newline at end of file
diff --git a/support/hololens/pch.cpp b/support/hololens/pch.cpp
new file mode 100644
index 00000000000..4c80ac1ff7e
--- /dev/null
+++ b/support/hololens/pch.cpp
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "pch.h"
diff --git a/support/hololens/pch.h b/support/hololens/pch.h
new file mode 100644
index 00000000000..f2ebe741294
--- /dev/null
+++ b/support/hololens/pch.h
@@ -0,0 +1,19 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#pragma once
+
+#include <concrt.h>
+#include <ppltasks.h>
+
+#define GL_GLEXT_PROTOTYPES
+
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <EGL/eglplatform.h>
+
+#include <angle_windowsstore.h>