diff --git a/samples/wp8/.gitignore b/samples/wp8/.gitignore
new file mode 100644
index 0000000000..d4b2f0f455
--- /dev/null
+++ b/samples/wp8/.gitignore
@@ -0,0 +1,87 @@
+# Ignore thumbnails created by windows
+Thumbs.db
+
+#ignore winrt copies of opencv files
+opencl_kernels.cpp
+opencl_kernels.hpp
+
+# Ignore files build by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.aps
+*.vcproj.*.user
+*.vcxproj.user
+*.vspscc
+*_i.c
+*.i
+*.icf
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+*.winmd
+[Bb]in
+[Dd]ebug*/
+*.sbr
+*.sdf
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+ipch/
+*.opensdf
+Generated Files
+AppPackages
+SubmissionInfo
+*.hps
+
+# Ignore files build by ndk and eclipse
+libs/
+bin/
+obj/
+gen/
+local.properties
+
+# Ignore python compiled files
+*.pyc
+
+# Ignore files build by airplay and marmalade
+build_*_xcode/
+build_*_vc10/
+
+# Ignore files built by xcode
+*.mode*v*
+*.pbxuser
+*.xcbkptlist
+*.xcscheme
+*.xcworkspacedata
+*.xcuserstate
+xcschememanagement.plist
+build/
+.DS_Store
+._.*
+xcuserdata/
+DerivedData/
+*.xccheckout
+
+# Ignore files built by bada
+.Simulator-Debug/
+.Target-Debug/
+.Target-Release/
+
+# Ignore files built by blackberry
+Simulator/
+Device-Debug/
+Device-Release/
+
+# Ignore vim swaps
+*.swp
+
+# CTags
+tags
diff --git a/samples/wp8/OcvImageManipulation/ImageManipulation.sln b/samples/wp8/OcvImageManipulation/ImageManipulation.sln
new file mode 100644
index 0000000000..59e797701d
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/ImageManipulation.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OcvImageManipulation", "PhoneXamlDirect3DApp1\PhoneXamlDirect3DApp1\OcvImageManipulation.csproj", "{CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhoneXamlDirect3DApp1Comp", "PhoneXamlDirect3DApp1\PhoneXamlDirect3DApp1Comp\PhoneXamlDirect3DApp1Comp.vcxproj", "{C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.ActiveCfg = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.Build.0 = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.Deploy.0 = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.ActiveCfg = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.Build.0 = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.Deploy.0 = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.Deploy.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.Deploy.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.Deploy.0 = Release|x86
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|ARM.ActiveCfg = Debug|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|ARM.Build.0 = Debug|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Win32.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|x86.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|x86.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Any CPU.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|ARM.ActiveCfg = Release|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|ARM.Build.0 = Release|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Win32.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Win32.Build.0 = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|x86.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml
new file mode 100644
index 0000000000..1a9cadac43
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs
new file mode 100644
index 0000000000..fd2a7c8466
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Diagnostics;
+using System.Resources;
+using System.Windows;
+using System.Windows.Markup;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using PhoneXamlDirect3DApp1.Resources;
+
+namespace PhoneXamlDirect3DApp1
+{
+ public partial class App : Application
+ {
+ ///
+ /// Provides easy access to the root frame of the Phone Application.
+ ///
+ /// The root frame of the Phone Application.
+ public static PhoneApplicationFrame RootFrame { get; private set; }
+
+ ///
+ /// Constructor for the Application object.
+ ///
+ public App()
+ {
+ // Global handler for uncaught exceptions.
+ UnhandledException += Application_UnhandledException;
+
+ // Standard XAML initialization
+ InitializeComponent();
+
+ // Phone-specific initialization
+ InitializePhoneApplication();
+
+ // Language display initialization
+ InitializeLanguage();
+
+ // Show graphics profiling information while debugging.
+ if (Debugger.IsAttached)
+ {
+ // Display the current frame rate counters.
+ Application.Current.Host.Settings.EnableFrameRateCounter = true;
+
+ // Show the areas of the app that are being redrawn in each frame.
+ //Application.Current.Host.Settings.EnableRedrawRegions = true;
+
+ // Enable non-production analysis visualization mode,
+ // which shows areas of a page that are handed off to GPU with a colored overlay.
+ //Application.Current.Host.Settings.EnableCacheVisualization = true;
+
+ // Prevent the screen from turning off while under the debugger by disabling
+ // the application's idle detection.
+ // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
+ // and consume battery power when the user is not using the phone.
+ PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
+ }
+
+ }
+
+ // Code to execute when the application is launching (eg, from Start)
+ // This code will not execute when the application is reactivated
+ private void Application_Launching(object sender, LaunchingEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is activated (brought to foreground)
+ // This code will not execute when the application is first launched
+ private void Application_Activated(object sender, ActivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is deactivated (sent to background)
+ // This code will not execute when the application is closing
+ private void Application_Deactivated(object sender, DeactivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is closing (eg, user hit Back)
+ // This code will not execute when the application is deactivated
+ private void Application_Closing(object sender, ClosingEventArgs e)
+ {
+ }
+
+ // Code to execute if a navigation fails
+ private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // A navigation has failed; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ // Code to execute on Unhandled Exceptions
+ private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // An unhandled exception has occurred; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ #region Phone application initialization
+
+ // Avoid double-initialization
+ private bool phoneApplicationInitialized = false;
+
+ // Do not add any additional code to this method
+ private void InitializePhoneApplication()
+ {
+ if (phoneApplicationInitialized)
+ return;
+
+ // Create the frame but don't set it as RootVisual yet; this allows the splash
+ // screen to remain active until the application is ready to render.
+ RootFrame = new PhoneApplicationFrame();
+ RootFrame.Navigated += CompleteInitializePhoneApplication;
+
+ // Handle navigation failures
+ RootFrame.NavigationFailed += RootFrame_NavigationFailed;
+
+ // Handle reset requests for clearing the backstack
+ RootFrame.Navigated += CheckForResetNavigation;
+
+ // Ensure we don't initialize again
+ phoneApplicationInitialized = true;
+ }
+
+ // Do not add any additional code to this method
+ private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
+ {
+ // Set the root visual to allow the application to render
+ if (RootVisual != RootFrame)
+ RootVisual = RootFrame;
+
+ // Remove this handler since it is no longer needed
+ RootFrame.Navigated -= CompleteInitializePhoneApplication;
+ }
+
+ private void CheckForResetNavigation(object sender, NavigationEventArgs e)
+ {
+ // If the app has received a 'reset' navigation, then we need to check
+ // on the next navigation to see if the page stack should be reset
+ if (e.NavigationMode == NavigationMode.Reset)
+ RootFrame.Navigated += ClearBackStackAfterReset;
+ }
+
+ private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
+ {
+ // Unregister the event so it doesn't get called again
+ RootFrame.Navigated -= ClearBackStackAfterReset;
+
+ // Only clear the stack for 'new' (forward) and 'refresh' navigations
+ if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)
+ return;
+
+ // For UI consistency, clear the entire page stack
+ while (RootFrame.RemoveBackEntry() != null)
+ {
+ ; // do nothing
+ }
+ }
+
+ #endregion
+
+ // Initialize the app's font and flow direction as defined in its localized resource strings.
+ //
+ // To ensure that the font of your application is aligned with its supported languages and that the
+ // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage
+ // and ResourceFlowDirection should be initialized in each resx file to match these values with that
+ // file's culture. For example:
+ //
+ // AppResources.es-ES.resx
+ // ResourceLanguage's value should be "es-ES"
+ // ResourceFlowDirection's value should be "LeftToRight"
+ //
+ // AppResources.ar-SA.resx
+ // ResourceLanguage's value should be "ar-SA"
+ // ResourceFlowDirection's value should be "RightToLeft"
+ //
+ // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.
+ //
+ private void InitializeLanguage()
+ {
+ try
+ {
+ // Set the font to match the display language defined by the
+ // ResourceLanguage resource string for each supported language.
+ //
+ // Fall back to the font of the neutral language if the Display
+ // language of the phone is not supported.
+ //
+ // If a compiler error is hit then ResourceLanguage is missing from
+ // the resource file.
+ RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
+
+ // Set the FlowDirection of all elements under the root frame based
+ // on the ResourceFlowDirection resource string for each
+ // supported language.
+ //
+ // If a compiler error is hit then ResourceFlowDirection is missing from
+ // the resource file.
+ FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
+ RootFrame.FlowDirection = flow;
+ }
+ catch
+ {
+ // If an exception is caught here it is most likely due to either
+ // ResourceLangauge not being correctly set to a supported language
+ // code or ResourceFlowDirection is set to a value other than LeftToRight
+ // or RightToLeft.
+
+ if (Debugger.IsAttached)
+ {
+ Debugger.Break();
+ }
+
+ throw;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png
new file mode 100644
index 0000000000..f7d2e97804
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png
new file mode 100644
index 0000000000..7d95d4e081
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png
new file mode 100644
index 0000000000..e0c59ac014
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png
new file mode 100644
index 0000000000..e93b89d600
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png
new file mode 100644
index 0000000000..550b1b5e8d
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png
new file mode 100644
index 0000000000..686e6b53f0
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png
new file mode 100644
index 0000000000..d4b5ede1b5
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs
new file mode 100644
index 0000000000..509836a952
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs
@@ -0,0 +1,14 @@
+using PhoneXamlDirect3DApp1.Resources;
+
+namespace PhoneXamlDirect3DApp1
+{
+ ///
+ /// Provides access to string resources.
+ ///
+ public class LocalizedStrings
+ {
+ private static AppResources _localizedResources = new AppResources();
+
+ public AppResources LocalizedResources { get { return _localizedResources; } }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml
new file mode 100644
index 0000000000..4c61045469
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs
new file mode 100644
index 0000000000..9a9f0f34a5
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using PhoneXamlDirect3DApp1Comp;
+using Microsoft.Phone.Tasks;
+using System.Windows.Media.Imaging;
+using System.Threading;
+using System.Windows.Resources;
+using System.IO;
+using System.Runtime.InteropServices.WindowsRuntime;
+using Microsoft.Xna.Framework.Media;
+using System.Windows.Threading;
+using Microsoft.Phone.Info;
+
+namespace PhoneXamlDirect3DApp1
+{
+ public partial class MainPage : PhoneApplicationPage
+ {
+ private Direct3DInterop m_d3dInterop = new Direct3DInterop();
+ private DispatcherTimer m_timer;
+
+ // Constructor
+ public MainPage()
+ {
+ InitializeComponent();
+ m_timer = new DispatcherTimer();
+ m_timer.Interval = new TimeSpan(0, 0, 1);
+ m_timer.Tick += new EventHandler(timer_Tick);
+ m_timer.Start();
+ }
+
+ private void DrawingSurface_Loaded(object sender, RoutedEventArgs e)
+ {
+ // Set window bounds in dips
+ m_d3dInterop.WindowBounds = new Windows.Foundation.Size(
+ (float)DrawingSurface.ActualWidth,
+ (float)DrawingSurface.ActualHeight
+ );
+
+ // Set native resolution in pixels
+ m_d3dInterop.NativeResolution = new Windows.Foundation.Size(
+ (float)Math.Floor(DrawingSurface.ActualWidth * Application.Current.Host.Content.ScaleFactor / 100.0f + 0.5f),
+ (float)Math.Floor(DrawingSurface.ActualHeight * Application.Current.Host.Content.ScaleFactor / 100.0f + 0.5f)
+ );
+
+ // Set render resolution to the full native resolution
+ m_d3dInterop.RenderResolution = m_d3dInterop.NativeResolution;
+
+ // Hook-up native component to DrawingSurface
+ DrawingSurface.SetContentProvider(m_d3dInterop.CreateContentProvider());
+ DrawingSurface.SetManipulationHandler(m_d3dInterop);
+ }
+
+ private void RadioButton_Checked(object sender, RoutedEventArgs e)
+ {
+ RadioButton rb = sender as RadioButton;
+ switch (rb.Name)
+ {
+ case "Normal":
+ m_d3dInterop.SetAlgorithm(OCVFilterType.ePreview);
+ break;
+
+ case "Gray":
+ m_d3dInterop.SetAlgorithm(OCVFilterType.eGray);
+ break;
+
+ case "Canny":
+ m_d3dInterop.SetAlgorithm(OCVFilterType.eCanny);
+ break;
+
+ case "Sepia":
+ m_d3dInterop.SetAlgorithm(OCVFilterType.eSepia);
+ break;
+
+ case "Features":
+ m_d3dInterop.SetAlgorithm(OCVFilterType.eFindFeatures);
+ break;
+ }
+ }
+
+ private void timer_Tick(object sender, EventArgs e)
+ {
+ try
+ {
+ // These are TextBlock controls that are created in the page’s XAML file.
+ float value = DeviceStatus.ApplicationCurrentMemoryUsage / (1024.0f * 1024.0f) ;
+ MemoryTextBlock.Text = value.ToString();
+ value = DeviceStatus.ApplicationPeakMemoryUsage / (1024.0f * 1024.0f);
+ PeakMemoryTextBlock.Text = value.ToString();
+ }
+ catch (Exception ex)
+ {
+ MemoryTextBlock.Text = ex.Message;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvImageManipulation.csproj b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvImageManipulation.csproj
new file mode 100644
index 0000000000..e53aa1a2a9
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvImageManipulation.csproj
@@ -0,0 +1,166 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}
+ {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ PhoneXamlDirect3DApp1
+ PhoneXamlDirect3DApp1
+ WindowsPhone
+ v8.0
+ $(TargetFrameworkVersion)
+ true
+
+
+ true
+ true
+ PhoneXamlDirect3DApp1_$(Configuration)_$(Platform).xap
+ Properties\AppManifest.xml
+ PhoneXamlDirect3DApp1.App
+ true
+ 11.0
+ true
+
+
+ true
+ full
+ false
+ Bin\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\x86\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\x86\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\ARM\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\ARM\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+
+ App.xaml
+
+
+
+ MainPage.xaml
+
+
+
+ True
+ True
+ AppResources.resx
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+
+ Designer
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+
+ PhoneXamlDirect3DApp1Comp
+
+
+
+
+ PublicResXFileCodeGenerator
+ AppResources.Designer.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml
new file mode 100644
index 0000000000..a955232752
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..449662c1e1
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Resources;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PhoneXamlDirect3DApp1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PhoneXamlDirect3DApp1")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8ca838f9-f7c6-4550-9b89-59e915a2cddb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: NeutralResourcesLanguageAttribute("en-US")]
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml
new file mode 100644
index 0000000000..5b7d9ab774
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ Assets\ApplicationIcon.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets\Tiles\FlipCycleTileSmall.png
+ 0
+ Assets\Tiles\FlipCycleTileMedium.png
+ OCVImageManipulation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs
new file mode 100644
index 0000000000..e34b684a96
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs
@@ -0,0 +1,105 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17626
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace PhoneXamlDirect3DApp1.Resources
+{
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class AppResources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal AppResources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if (object.ReferenceEquals(resourceMan, null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PhoneXamlDirect3DApp1.Resources.AppResources", typeof(AppResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LeftToRight.
+ ///
+ public static string ResourceFlowDirection
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceFlowDirection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to us-EN.
+ ///
+ public static string ResourceLanguage
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceLanguage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MY APPLICATION.
+ ///
+ public static string ApplicationTitle
+ {
+ get
+ {
+ return ResourceManager.GetString("ApplicationTitle", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx
new file mode 100644
index 0000000000..38c1356d08
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ LeftToRight
+ Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language
+
+
+ en-US
+ Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.
+
+
+ MY APPLICATION
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg
new file mode 100644
index 0000000000..566fbb05a8
Binary files /dev/null and b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg differ
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h
new file mode 100644
index 0000000000..4912f570e3
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h
@@ -0,0 +1,76 @@
+#pragma once
+
+#include
+
+// Helper class for basic timing.
+ref class BasicTimer sealed
+{
+public:
+ // Initializes internal timer values.
+ BasicTimer()
+ {
+ if (!QueryPerformanceFrequency(&m_frequency))
+ {
+ throw ref new Platform::FailureException();
+ }
+ Reset();
+ }
+
+ // Reset the timer to initial values.
+ void Reset()
+ {
+ Update();
+ m_startTime = m_currentTime;
+ m_total = 0.0f;
+ m_delta = 1.0f / 60.0f;
+ }
+
+ // Update the timer's internal values.
+ void Update()
+ {
+ if (!QueryPerformanceCounter(&m_currentTime))
+ {
+ throw ref new Platform::FailureException();
+ }
+
+ m_total = static_cast(
+ static_cast(m_currentTime.QuadPart - m_startTime.QuadPart) /
+ static_cast(m_frequency.QuadPart)
+ );
+
+ if (m_lastTime.QuadPart == m_startTime.QuadPart)
+ {
+ // If the timer was just reset, report a time delta equivalent to 60Hz frame time.
+ m_delta = 1.0f / 60.0f;
+ }
+ else
+ {
+ m_delta = static_cast(
+ static_cast(m_currentTime.QuadPart - m_lastTime.QuadPart) /
+ static_cast(m_frequency.QuadPart)
+ );
+ }
+
+ m_lastTime = m_currentTime;
+ }
+
+ // Duration in seconds between the last call to Reset() and the last call to Update().
+ property float Total
+ {
+ float get() { return m_total; }
+ }
+
+ // Duration in seconds between the previous two calls to Update().
+ property float Delta
+ {
+ float get() { return m_delta; }
+ }
+
+private:
+ LARGE_INTEGER m_frequency;
+ LARGE_INTEGER m_currentTime;
+ LARGE_INTEGER m_startTime;
+ LARGE_INTEGER m_lastTime;
+ float m_total;
+ float m_delta;
+};
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp
new file mode 100644
index 0000000000..7db27bc356
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp
@@ -0,0 +1,162 @@
+#include "pch.h"
+#include "Direct3DBase.h"
+
+using namespace DirectX;
+using namespace Microsoft::WRL;
+using namespace Windows::UI::Core;
+using namespace Windows::Foundation;
+using namespace Windows::Graphics::Display;
+
+// Constructor.
+Direct3DBase::Direct3DBase()
+{
+}
+
+// Initialize the Direct3D resources required to run.
+void Direct3DBase::Initialize()
+{
+ CreateDeviceResources();
+}
+
+// These are the resources that depend on the device.
+void Direct3DBase::CreateDeviceResources()
+{
+ // This flag adds support for surfaces with a different color channel ordering
+ // than the API default. It is required for compatibility with Direct2D.
+ UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
+
+#if defined(_DEBUG)
+ // If the project is in a debug build, enable debugging via SDK Layers with this flag.
+ creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
+#endif
+
+ // This array defines the set of DirectX hardware feature levels this app will support.
+ // Note the ordering should be preserved.
+ // Don't forget to declare your application's minimum required feature level in its
+ // description. All applications are assumed to support 9.1 unless otherwise stated.
+ D3D_FEATURE_LEVEL featureLevels[] =
+ {
+ D3D_FEATURE_LEVEL_11_1,
+ D3D_FEATURE_LEVEL_11_0,
+ D3D_FEATURE_LEVEL_10_1,
+ D3D_FEATURE_LEVEL_10_0,
+ D3D_FEATURE_LEVEL_9_3
+ };
+
+ // Create the Direct3D 11 API device object and a corresponding context.
+ ComPtr device;
+ ComPtr context;
+ DX::ThrowIfFailed(
+ D3D11CreateDevice(
+ nullptr, // Specify nullptr to use the default adapter.
+ D3D_DRIVER_TYPE_HARDWARE,
+ nullptr,
+ creationFlags, // Set set debug and Direct2D compatibility flags.
+ featureLevels, // List of feature levels this app can support.
+ ARRAYSIZE(featureLevels),
+ D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION.
+ &device, // Returns the Direct3D device created.
+ &m_featureLevel, // Returns feature level of device created.
+ &context // Returns the device immediate context.
+ )
+ );
+
+ // Get the Direct3D 11.1 API device and context interfaces.
+ DX::ThrowIfFailed(
+ device.As(&m_d3dDevice)
+ );
+
+ DX::ThrowIfFailed(
+ context.As(&m_d3dContext)
+ );
+}
+
+// Allocate all memory resources that depend on the window size.
+void Direct3DBase::CreateWindowSizeDependentResources()
+{
+ // Create a descriptor for the render target buffer.
+ CD3D11_TEXTURE2D_DESC renderTargetDesc(
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ static_cast(m_renderTargetSize.Width),
+ static_cast(m_renderTargetSize.Height),
+ 1,
+ 1,
+ D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE
+ );
+ renderTargetDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX | D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
+
+ // Allocate a 2-D surface as the render target buffer.
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &renderTargetDesc,
+ nullptr,
+ &m_renderTarget
+ )
+ );
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateRenderTargetView(
+ m_renderTarget.Get(),
+ nullptr,
+ &m_renderTargetView
+ )
+ );
+
+ // Create a depth stencil view.
+ CD3D11_TEXTURE2D_DESC depthStencilDesc(
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ static_cast(m_renderTargetSize.Width),
+ static_cast(m_renderTargetSize.Height),
+ 1,
+ 1,
+ D3D11_BIND_DEPTH_STENCIL
+ );
+
+ ComPtr depthStencil;
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &depthStencilDesc,
+ nullptr,
+ &depthStencil
+ )
+ );
+
+ CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateDepthStencilView(
+ depthStencil.Get(),
+ &depthStencilViewDesc,
+ &m_depthStencilView
+ )
+ );
+
+ // Set the rendering viewport to target the entire window.
+ CD3D11_VIEWPORT viewport(
+ 0.0f,
+ 0.0f,
+ m_renderTargetSize.Width,
+ m_renderTargetSize.Height
+ );
+
+ m_d3dContext->RSSetViewports(1, &viewport);
+}
+
+void Direct3DBase::UpdateForRenderResolutionChange(float width, float height)
+{
+ m_renderTargetSize.Width = width;
+ m_renderTargetSize.Height = height;
+
+ ID3D11RenderTargetView* nullViews[] = {nullptr};
+ m_d3dContext->OMSetRenderTargets(ARRAYSIZE(nullViews), nullViews, nullptr);
+ m_renderTarget = nullptr;
+ m_renderTargetView = nullptr;
+ m_depthStencilView = nullptr;
+ m_d3dContext->Flush();
+ CreateWindowSizeDependentResources();
+}
+
+void Direct3DBase::UpdateForWindowSizeChange(float width, float height)
+{
+ m_windowBounds.Width = width;
+ m_windowBounds.Height = height;
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h
new file mode 100644
index 0000000000..b4d83a7a12
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "DirectXHelper.h"
+
+// Helper class that initializes DirectX APIs for 3D rendering.
+ref class Direct3DBase abstract
+{
+internal:
+ Direct3DBase();
+
+public:
+ virtual void Initialize();
+ virtual void CreateDeviceResources();
+ virtual void CreateWindowSizeDependentResources();
+ virtual void UpdateForRenderResolutionChange(float width, float height);
+ virtual void UpdateForWindowSizeChange(float width, float height);
+ virtual void Render() = 0;
+
+internal:
+ virtual ID3D11Texture2D* GetTexture()
+ {
+ return m_renderTarget.Get();
+ }
+
+protected private:
+ // Direct3D Objects.
+ Microsoft::WRL::ComPtr m_d3dDevice;
+ Microsoft::WRL::ComPtr m_d3dContext;
+ Microsoft::WRL::ComPtr m_renderTarget;
+ Microsoft::WRL::ComPtr m_renderTargetView;
+ Microsoft::WRL::ComPtr m_depthStencilView;
+
+ // Cached renderer properties.
+ D3D_FEATURE_LEVEL m_featureLevel;
+ Windows::Foundation::Size m_renderTargetSize;
+ Windows::Foundation::Rect m_windowBounds;
+};
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp
new file mode 100644
index 0000000000..669ded9386
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp
@@ -0,0 +1,77 @@
+#include "pch.h"
+#include "Direct3DContentProvider.h"
+
+using namespace PhoneXamlDirect3DApp1Comp;
+
+Direct3DContentProvider::Direct3DContentProvider(Direct3DInterop^ controller) :
+ m_controller(controller)
+{
+ m_controller->RequestAdditionalFrame += ref new RequestAdditionalFrameHandler([=] ()
+ {
+ if (m_host)
+ {
+ m_host->RequestAdditionalFrame();
+ }
+ });
+
+ m_controller->RecreateSynchronizedTexture += ref new RecreateSynchronizedTextureHandler([=] ()
+ {
+ if (m_host)
+ {
+ m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
+ }
+ });
+}
+
+// IDrawingSurfaceContentProviderNative interface
+HRESULT Direct3DContentProvider::Connect(_In_ IDrawingSurfaceRuntimeHostNative* host)
+{
+ m_host = host;
+
+ return m_controller->Connect(host);
+}
+
+void Direct3DContentProvider::Disconnect()
+{
+ m_controller->Disconnect();
+ m_host = nullptr;
+ m_synchronizedTexture = nullptr;
+}
+
+HRESULT Direct3DContentProvider::PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty)
+{
+ return m_controller->PrepareResources(presentTargetTime, contentDirty);
+}
+
+HRESULT Direct3DContentProvider::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle)
+{
+ HRESULT hr = S_OK;
+
+ if (!m_synchronizedTexture)
+ {
+ hr = m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
+ }
+
+ // Set output parameters.
+ textureSubRectangle->left = 0.0f;
+ textureSubRectangle->top = 0.0f;
+ textureSubRectangle->right = static_cast(size->width);
+ textureSubRectangle->bottom = static_cast(size->height);
+
+ m_synchronizedTexture.CopyTo(synchronizedTexture);
+
+ // Draw to the texture.
+ if (SUCCEEDED(hr))
+ {
+ hr = m_synchronizedTexture->BeginDraw();
+
+ if (SUCCEEDED(hr))
+ {
+ hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle);
+ }
+
+ m_synchronizedTexture->EndDraw();
+ }
+
+ return hr;
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h
new file mode 100644
index 0000000000..d515c66d98
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "pch.h"
+#include
+#include
+#include
+
+#include "Direct3DInterop.h"
+
+class Direct3DContentProvider : public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags,
+ ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider,
+ IDrawingSurfaceContentProviderNative>
+{
+public:
+ Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller);
+
+ void ReleaseD3DResources();
+
+ // IDrawingSurfaceContentProviderNative
+ HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host);
+ void STDMETHODCALLTYPE Disconnect();
+
+ HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty);
+ HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle);
+
+private:
+ HRESULT InitializeTexture(_In_ const DrawingSurfaceSizeF* size);
+
+ PhoneXamlDirect3DApp1Comp::Direct3DInterop^ m_controller;
+ Microsoft::WRL::ComPtr m_host;
+ Microsoft::WRL::ComPtr m_synchronizedTexture;
+};
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp
new file mode 100644
index 0000000000..acafc4b2c1
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp
@@ -0,0 +1,351 @@
+#include "pch.h"
+#include "Direct3DInterop.h"
+#include "Direct3DContentProvider.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using namespace Windows::Storage::Streams;
+using namespace Microsoft::WRL;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Core;
+using namespace Microsoft::WRL;
+using namespace Windows::Phone::Graphics::Interop;
+using namespace Windows::Phone::Input::Interop;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+using namespace Windows::Phone::Media::Capture;
+
+#if !defined(_M_ARM)
+#pragma message("warning: Direct3DInterop.cpp: Windows Phone camera code does not run in the emulator.")
+#pragma message("warning: Direct3DInterop.cpp: Please compile as an ARM build and run on a device.")
+#endif
+
+namespace PhoneXamlDirect3DApp1Comp
+{
+ // Called each time a preview frame is available
+ void CameraCapturePreviewSink::OnFrameAvailable(
+ DXGI_FORMAT format,
+ UINT width,
+ UINT height,
+ BYTE* pixels
+ )
+ {
+ m_Direct3dInterop->UpdateFrame(pixels, width, height);
+ }
+
+ // Called each time a captured frame is available
+ void CameraCaptureSampleSink::OnSampleAvailable(
+ ULONGLONG hnsPresentationTime,
+ ULONGLONG hnsSampleDuration,
+ DWORD cbSample,
+ BYTE* pSample)
+ {
+
+
+ }
+
+ Direct3DInterop::Direct3DInterop()
+ : m_algorithm(OCVFilterType::ePreview)
+ , m_contentDirty(false)
+ , m_backFrame(nullptr)
+ , m_frontFrame(nullptr)
+ {
+ }
+
+ bool Direct3DInterop::SwapFrames()
+ {
+ std::lock_guard lock(m_mutex);
+ if(m_backFrame != nullptr)
+ {
+ std::swap(m_backFrame, m_frontFrame);
+ return true;
+ }
+ return false;
+ }
+
+ void Direct3DInterop::UpdateFrame(byte* buffer,int width,int height)
+ {
+ std::lock_guard lock(m_mutex);
+ if(m_backFrame == nullptr)
+ {
+ m_backFrame = std::shared_ptr (new cv::Mat(height, width, CV_8UC4));
+ m_frontFrame = std::shared_ptr (new cv::Mat(height, width, CV_8UC4));
+ }
+
+ memcpy(m_backFrame.get()->data, buffer, 4 * height*width);
+ m_contentDirty = true;
+ RequestAdditionalFrame();
+ }
+
+ void Direct3DInterop::ProcessFrame()
+ {
+ if (SwapFrames())
+ {
+ if (m_renderer)
+ {
+ cv::Mat* mat = m_frontFrame.get();
+
+ switch (m_algorithm)
+ {
+ case OCVFilterType::ePreview:
+ {
+ break;
+ }
+
+ case OCVFilterType::eGray:
+ {
+ ApplyGrayFilter(mat);
+ break;
+ }
+
+ case OCVFilterType::eCanny:
+ {
+ ApplyCannyFilter(mat);
+ break;
+ }
+
+ case OCVFilterType::eBlur:
+ {
+ ApplyBlurFilter(mat);
+ break;
+ }
+
+ case OCVFilterType::eFindFeatures:
+ {
+ ApplyFindFeaturesFilter(mat);
+ break;
+ }
+
+ case OCVFilterType::eSepia:
+ {
+ ApplySepiaFilter(mat);
+ break;
+ }
+ }
+
+ m_renderer->CreateTextureFromByte(mat->data, mat->cols, mat->rows);
+ }
+ }
+ }
+
+ void Direct3DInterop::ApplyGrayFilter(cv::Mat* mat)
+ {
+ cv::Mat intermediateMat;
+ cv::cvtColor(*mat, intermediateMat, CV_RGBA2GRAY);
+ cv::cvtColor(intermediateMat, *mat, CV_GRAY2BGRA);
+ }
+
+ void Direct3DInterop::ApplyCannyFilter(cv::Mat* mat)
+ {
+ cv::Mat intermediateMat;
+ cv::Canny(*mat, intermediateMat, 80, 90);
+ cv::cvtColor(intermediateMat, *mat, CV_GRAY2BGRA);
+ }
+
+ void Direct3DInterop::ApplyBlurFilter(cv::Mat* mat)
+ {
+ cv::Mat intermediateMat;
+ // cv::Blur(image, intermediateMat, 80, 90);
+ cv::cvtColor(intermediateMat, *mat, CV_GRAY2BGRA);
+ }
+
+ void Direct3DInterop::ApplyFindFeaturesFilter(cv::Mat* mat)
+ {
+ cv::Mat intermediateMat;
+ cv::Ptr detector = cv::FastFeatureDetector::create(50);
+ std::vector features;
+
+ cv::cvtColor(*mat, intermediateMat, CV_RGBA2GRAY);
+ detector->detect(intermediateMat, features);
+
+ for( unsigned int i = 0; i < std::min(features.size(), (size_t)50); i++ )
+ {
+ const cv::KeyPoint& kp = features[i];
+ cv::circle(*mat, cv::Point((int)kp.pt.x, (int)kp.pt.y), 10, cv::Scalar(255,0,0,255));
+ }
+ }
+
+ void Direct3DInterop::ApplySepiaFilter(cv::Mat* mat)
+ {
+ const float SepiaKernelData[16] =
+ {
+ /* B */0.131f, 0.534f, 0.272f, 0.f,
+ /* G */0.168f, 0.686f, 0.349f, 0.f,
+ /* R */0.189f, 0.769f, 0.393f, 0.f,
+ /* A */0.000f, 0.000f, 0.000f, 1.f
+ };
+
+ const cv::Mat SepiaKernel(4, 4, CV_32FC1, (void*)SepiaKernelData);
+ cv::transform(*mat, *mat, SepiaKernel);
+ }
+
+ IDrawingSurfaceContentProvider^ Direct3DInterop::CreateContentProvider()
+ {
+ ComPtr provider = Make(this);
+ return reinterpret_cast(provider.Detach());
+ }
+
+ // IDrawingSurfaceManipulationHandler
+ void Direct3DInterop::SetManipulationHost(DrawingSurfaceManipulationHost^ manipulationHost)
+ {
+ manipulationHost->PointerPressed +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerPressed);
+
+ manipulationHost->PointerMoved +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerMoved);
+
+ manipulationHost->PointerReleased +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerReleased);
+ }
+
+ void Direct3DInterop::RenderResolution::set(Windows::Foundation::Size renderResolution)
+ {
+ if (renderResolution.Width != m_renderResolution.Width ||
+ renderResolution.Height != m_renderResolution.Height)
+ {
+ m_renderResolution = renderResolution;
+
+ if (m_renderer)
+ {
+ m_renderer->UpdateForRenderResolutionChange(m_renderResolution.Width, m_renderResolution.Height);
+ RecreateSynchronizedTexture();
+ }
+ }
+ }
+
+ // Event Handlers
+
+ void Direct3DInterop::OnPointerPressed(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ void Direct3DInterop::OnPointerMoved(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ void Direct3DInterop::OnPointerReleased(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ void Direct3DInterop::StartCamera()
+ {
+ // Set the capture dimensions
+ Size captureDimensions;
+ captureDimensions.Width = 640;
+ captureDimensions.Height = 480;
+
+ // Open the AudioVideoCaptureDevice for video only
+ IAsyncOperation ^openOperation = AudioVideoCaptureDevice::OpenForVideoOnlyAsync(CameraSensorLocation::Back, captureDimensions);
+
+ openOperation->Completed = ref new AsyncOperationCompletedHandler(
+ [this] (IAsyncOperation ^operation, Windows::Foundation::AsyncStatus status)
+ {
+ if (status == Windows::Foundation::AsyncStatus::Completed)
+ {
+ auto captureDevice = operation->GetResults();
+
+ // Save the reference to the opened video capture device
+ pAudioVideoCaptureDevice = captureDevice;
+
+ // Retrieve the native ICameraCaptureDeviceNative interface from the managed video capture device
+ ICameraCaptureDeviceNative *iCameraCaptureDeviceNative = NULL;
+ HRESULT hr = reinterpret_cast(captureDevice)->QueryInterface(__uuidof(ICameraCaptureDeviceNative), (void**) &iCameraCaptureDeviceNative);
+
+ // Save the pointer to the native interface
+ pCameraCaptureDeviceNative = iCameraCaptureDeviceNative;
+
+ // Initialize the preview dimensions (see the accompanying article at )
+ // The aspect ratio of the capture and preview resolution must be equal,
+ // 4:3 for capture => 4:3 for preview, and 16:9 for capture => 16:9 for preview.
+ Size previewDimensions;
+ previewDimensions.Width = 640;
+ previewDimensions.Height = 480;
+
+ IAsyncAction^ setPreviewResolutionAction = pAudioVideoCaptureDevice->SetPreviewResolutionAsync(previewDimensions);
+ setPreviewResolutionAction->Completed = ref new AsyncActionCompletedHandler(
+ [this](IAsyncAction^ action, Windows::Foundation::AsyncStatus status)
+ {
+ HResult hr = action->ErrorCode;
+
+ if (status == Windows::Foundation::AsyncStatus::Completed)
+ {
+ // Create the sink
+ MakeAndInitialize(&pCameraCapturePreviewSink);
+ pCameraCapturePreviewSink->SetDelegate(this);
+ pCameraCaptureDeviceNative->SetPreviewSink(pCameraCapturePreviewSink);
+
+ // Set the preview format
+ pCameraCaptureDeviceNative->SetPreviewFormat(DXGI_FORMAT::DXGI_FORMAT_B8G8R8A8_UNORM);
+ }
+ }
+ );
+
+ // Retrieve IAudioVideoCaptureDeviceNative native interface from managed projection.
+ IAudioVideoCaptureDeviceNative *iAudioVideoCaptureDeviceNative = NULL;
+ hr = reinterpret_cast(captureDevice)->QueryInterface(__uuidof(IAudioVideoCaptureDeviceNative), (void**) &iAudioVideoCaptureDeviceNative);
+
+ // Save the pointer to the IAudioVideoCaptureDeviceNative native interface
+ pAudioVideoCaptureDeviceNative = iAudioVideoCaptureDeviceNative;
+
+ // Set sample encoding format to ARGB. See the documentation for further values.
+ pAudioVideoCaptureDevice->VideoEncodingFormat = CameraCaptureVideoFormat::Argb;
+
+ // Initialize and set the CameraCaptureSampleSink class as sink for captures samples
+ MakeAndInitialize(&pCameraCaptureSampleSink);
+ pAudioVideoCaptureDeviceNative->SetVideoSampleSink(pCameraCaptureSampleSink);
+
+ // Start recording (only way to receive samples using the ICameraCaptureSampleSink interface
+ pAudioVideoCaptureDevice->StartRecordingToSinkAsync();
+ }
+ }
+ );
+
+ }
+ // Interface With Direct3DContentProvider
+ HRESULT Direct3DInterop::Connect(_In_ IDrawingSurfaceRuntimeHostNative* host)
+ {
+ m_renderer = ref new QuadRenderer();
+ m_renderer->Initialize();
+ m_renderer->UpdateForWindowSizeChange(WindowBounds.Width, WindowBounds.Height);
+ m_renderer->UpdateForRenderResolutionChange(m_renderResolution.Width, m_renderResolution.Height);
+ StartCamera();
+
+ return S_OK;
+ }
+
+ void Direct3DInterop::Disconnect()
+ {
+ m_renderer = nullptr;
+ }
+
+ HRESULT Direct3DInterop::PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty)
+ {
+ *contentDirty = m_contentDirty;
+ if(m_contentDirty)
+ {
+ ProcessFrame();
+ }
+ m_contentDirty = false;
+ return S_OK;
+ }
+
+ HRESULT Direct3DInterop::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle)
+ {
+ m_renderer->Update();
+ m_renderer->Render();
+ return S_OK;
+ }
+
+ ID3D11Texture2D* Direct3DInterop::GetTexture()
+ {
+ return m_renderer->GetTexture();
+ }
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h
new file mode 100644
index 0000000000..d5773a5155
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h
@@ -0,0 +1,143 @@
+#pragma once
+
+#include "pch.h"
+#include "BasicTimer.h"
+#include "QuadRenderer.h"
+#include
+#include
+#include
+#include
+#include
+
+
+#include
+
+
+namespace PhoneXamlDirect3DApp1Comp
+{
+
+public enum class OCVFilterType
+{
+ ePreview,
+ eGray,
+ eCanny,
+ eBlur,
+ eFindFeatures,
+ eSepia,
+ eNumOCVFilterTypes
+};
+
+class CameraCapturePreviewSink;
+class CameraCaptureSampleSink;
+
+public delegate void RequestAdditionalFrameHandler();
+public delegate void RecreateSynchronizedTextureHandler();
+
+[Windows::Foundation::Metadata::WebHostHidden]
+public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler
+{
+public:
+ Direct3DInterop();
+
+ Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider();
+
+ // IDrawingSurfaceManipulationHandler
+ virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost);
+
+ event RequestAdditionalFrameHandler^ RequestAdditionalFrame;
+ event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture;
+
+ property Windows::Foundation::Size WindowBounds;
+ property Windows::Foundation::Size NativeResolution;
+ property Windows::Foundation::Size RenderResolution
+ {
+ Windows::Foundation::Size get(){ return m_renderResolution; }
+ void set(Windows::Foundation::Size renderResolution);
+ }
+ void SetAlgorithm(OCVFilterType type) { m_algorithm = type; };
+ void UpdateFrame(byte* buffer, int width, int height);
+
+
+protected:
+ // Event Handlers
+ void OnPointerPressed(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+ void OnPointerMoved(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+ void OnPointerReleased(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+
+internal:
+ HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host);
+ void STDMETHODCALLTYPE Disconnect();
+ HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty);
+ HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle);
+ ID3D11Texture2D* GetTexture();
+
+private:
+ void StartCamera();
+ void ProcessFrame();
+ bool SwapFrames();
+
+ QuadRenderer^ m_renderer;
+ Windows::Foundation::Size m_renderResolution;
+ OCVFilterType m_algorithm;
+ bool m_contentDirty;
+ std::shared_ptr m_backFrame;
+ std::shared_ptr m_frontFrame;
+ std::mutex m_mutex;
+
+ Windows::Phone::Media::Capture::AudioVideoCaptureDevice ^pAudioVideoCaptureDevice;
+ ICameraCaptureDeviceNative* pCameraCaptureDeviceNative;
+ IAudioVideoCaptureDeviceNative* pAudioVideoCaptureDeviceNative;
+ CameraCapturePreviewSink* pCameraCapturePreviewSink;
+ CameraCaptureSampleSink* pCameraCaptureSampleSink;
+
+ //void ApplyPreviewFilter(const cv::Mat& image);
+ void ApplyGrayFilter(cv::Mat* mat);
+ void ApplyCannyFilter(cv::Mat* mat);
+ void ApplyBlurFilter(cv::Mat* mat);
+ void ApplyFindFeaturesFilter(cv::Mat* mat);
+ void ApplySepiaFilter(cv::Mat* mat);
+};
+
+class CameraCapturePreviewSink :
+ public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags,
+ ICameraCapturePreviewSink>
+{
+public:
+ void SetDelegate(Direct3DInterop^ delegate)
+ {
+ m_Direct3dInterop = delegate;
+ }
+
+ IFACEMETHODIMP_(void) OnFrameAvailable(
+ DXGI_FORMAT format,
+ UINT width,
+ UINT height,
+ BYTE* pixels);
+
+private:
+ Direct3DInterop^ m_Direct3dInterop;
+};
+
+class CameraCaptureSampleSink :
+ public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags,
+ ICameraCaptureSampleSink>
+{
+public:
+ void SetDelegate(Direct3DInterop^ delegate)
+ {
+ m_Direct3dInterop = delegate;
+ }
+
+ IFACEMETHODIMP_(void) OnSampleAvailable(
+ ULONGLONG hnsPresentationTime,
+ ULONGLONG hnsSampleDuration,
+ DWORD cbSample,
+ BYTE* pSample);
+
+private:
+ Direct3DInterop^ m_Direct3dInterop;
+};
+
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h
new file mode 100644
index 0000000000..01451216b1
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include
+#include
+#include
+
+namespace DX
+{
+ inline void ThrowIfFailed(HRESULT hr)
+ {
+ if (FAILED(hr))
+ {
+ // Set a breakpoint on this line to catch Win32 API errors.
+ throw Platform::Exception::CreateException(hr);
+ }
+ }
+
+ // Function that reads from a binary file asynchronously.
+ inline Concurrency::task^> ReadDataAsync(Platform::String^ filename)
+ {
+ using namespace Windows::Storage;
+ using namespace Concurrency;
+
+ auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
+
+ return create_task(folder->GetFileAsync(filename)).then([] (StorageFile^ file)
+ {
+ return file->OpenReadAsync();
+ }).then([] (Streams::IRandomAccessStreamWithContentType^ stream)
+ {
+ unsigned int bufferSize = static_cast(stream->Size);
+ auto fileBuffer = ref new Streams::Buffer(bufferSize);
+ return stream->ReadAsync(fileBuffer, bufferSize, Streams::InputStreamOptions::None);
+ }).then([] (Streams::IBuffer^ fileBuffer) -> Platform::Array^
+ {
+ auto fileData = ref new Platform::Array(fileBuffer->Length);
+ Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData);
+ return fileData;
+ });
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj
new file mode 100644
index 0000000000..5babe235ee
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj
@@ -0,0 +1,196 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ ARM
+
+
+ Release
+ Win32
+
+
+ Release
+ ARM
+
+
+
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}
+ PhoneXamlDirect3DApp1Comp
+ en-US
+ 11.0
+ true
+
+
+
+
+ $(OutDir)\$(MSBuildProjectName)\
+
+ $(SolutionDir)$(Configuration)\$(MSBuildProjectName)\
+ $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\
+
+ false
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+
+
+
+
+
+ false
+
+
+ $(ProjectDir)..\..\..\..\..\bin\WP\8.0\x86\lib\Debug;$(ProjectDir)..\..\..\..\..\bin\WP\8.0\x86\3rdparty\lib\Debug;$(WP80ToolSetPath)lib;$(WindowsSDK_LibraryPath_x86)
+
+
+
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ $(ProjectDir)..\..\..\..\..\modules\core\include;$(ProjectDir)..\..\..\..\..\modules\imgproc\include;$(ProjectDir)..\..\..\..\..\modules\flann\include;$(ProjectDir)..\..\..\..\..\modules\features2d\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ opencv_core300d.lib;opencv_imgproc300d.lib;opencv_features2d300d.lib;opencv_flann300d.lib;opencv_ml300d.lib;zlibd.lib;d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+
+
+
+
+
+ Pixel
+ 4.0_level_9_3
+
+
+ Vertex
+ 4.0_level_9_3
+
+
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp
new file mode 100644
index 0000000000..df7d9b794c
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp
@@ -0,0 +1,340 @@
+#include "pch.h"
+#include "QuadRenderer.h"
+
+using namespace DirectX;
+using namespace Microsoft::WRL;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Core;
+
+QuadRenderer::QuadRenderer() :
+ m_loadingComplete(false),
+ m_indexCount(0)
+{
+}
+
+void QuadRenderer::CreateTextureFromByte(byte* buffer,int width,int height)
+{
+ int pixelSize = 4;
+
+ if (m_Texture.Get() == nullptr)
+ {
+ CD3D11_TEXTURE2D_DESC textureDesc(
+ DXGI_FORMAT_B8G8R8A8_UNORM, // format
+ static_cast(width), // width
+ static_cast(height), // height
+ 1, // arraySize
+ 1, // mipLevels
+ D3D11_BIND_SHADER_RESOURCE, // bindFlags
+ D3D11_USAGE_DYNAMIC, // usage
+ D3D11_CPU_ACCESS_WRITE, // cpuaccessFlags
+ 1, // sampleCount
+ 0, // sampleQuality
+ 0 // miscFlags
+ );
+
+ D3D11_SUBRESOURCE_DATA data;
+ data.pSysMem = buffer;
+ data.SysMemPitch = pixelSize*width;
+ data.SysMemSlicePitch = pixelSize*width*height;
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &textureDesc,
+ &data,
+ m_Texture.ReleaseAndGetAddressOf()
+ )
+ );
+
+ m_d3dDevice->CreateShaderResourceView(m_Texture.Get(), NULL, m_SRV.ReleaseAndGetAddressOf());
+ D3D11_SAMPLER_DESC sampDesc;
+ ZeroMemory(&sampDesc, sizeof(sampDesc));
+ sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+ sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
+ sampDesc.MinLOD = 0;
+ sampDesc.MaxLOD = D3D11_FLOAT32_MAX;
+ m_d3dDevice->CreateSamplerState(&sampDesc, m_QuadsTexSamplerState.ReleaseAndGetAddressOf());
+ }
+ else
+ {
+ int nRowSpan = width * pixelSize;
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ HRESULT hr = m_d3dContext->Map(m_Texture.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ BYTE* mappedData = static_cast(mappedResource.pData);
+
+ for (int i = 0; i < height; ++i)
+ {
+ memcpy(mappedData + (i*mappedResource.RowPitch), buffer + (i*nRowSpan), nRowSpan);
+ }
+
+ m_d3dContext->Unmap(m_Texture.Get(), 0);
+ }
+}
+
+void QuadRenderer::CreateDeviceResources()
+{
+ Direct3DBase::CreateDeviceResources();
+ D3D11_BLEND_DESC blendDesc;
+ ZeroMemory( &blendDesc, sizeof(blendDesc) );
+
+ D3D11_RENDER_TARGET_BLEND_DESC rtbd;
+ ZeroMemory( &rtbd, sizeof(rtbd) );
+
+ rtbd.BlendEnable = TRUE;
+ rtbd.SrcBlend = D3D11_BLEND_SRC_ALPHA;
+ rtbd.DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
+ rtbd.BlendOp = D3D11_BLEND_OP_ADD;
+ rtbd.SrcBlendAlpha = D3D11_BLEND_ONE;
+ rtbd.DestBlendAlpha = D3D11_BLEND_ZERO;
+ rtbd.BlendOpAlpha = D3D11_BLEND_OP_ADD;
+ rtbd.RenderTargetWriteMask = 0x0f;
+
+ blendDesc.AlphaToCoverageEnable = false;
+ blendDesc.RenderTarget[0] = rtbd;
+
+ m_d3dDevice->CreateBlendState(&blendDesc, &m_Transparency);
+
+ D3D11_RASTERIZER_DESC cmdesc;
+ ZeroMemory(&cmdesc, sizeof(D3D11_RASTERIZER_DESC));
+
+ cmdesc.FillMode = D3D11_FILL_SOLID;
+ cmdesc.CullMode = D3D11_CULL_BACK;
+ cmdesc.DepthClipEnable = TRUE;
+
+ cmdesc.FrontCounterClockwise = true;
+ m_d3dDevice->CreateRasterizerState(&cmdesc, &CCWcullMode);
+
+ cmdesc.FrontCounterClockwise = false;
+ m_d3dDevice->CreateRasterizerState(&cmdesc, &CWcullMode);
+
+ auto loadVSTask = DX::ReadDataAsync("SimpleVertexShader.cso");
+ auto loadPSTask = DX::ReadDataAsync("SimplePixelShader.cso");
+ auto createVSTask = loadVSTask.then([this](Platform::Array^ fileData)
+ {
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateVertexShader(
+ fileData->Data,
+ fileData->Length,
+ nullptr,
+ &m_vertexShader
+ )
+ );
+
+ const D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
+ {
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ };
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateInputLayout(
+ vertexDesc,
+ ARRAYSIZE(vertexDesc),
+ fileData->Data,
+ fileData->Length,
+ &m_inputLayout
+ )
+ );
+ });
+
+ auto createPSTask = loadPSTask.then([this](Platform::Array^ fileData)
+ {
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreatePixelShader(
+ fileData->Data,
+ fileData->Length,
+ nullptr,
+ &m_pixelShader
+ )
+ );
+
+ CD3D11_BUFFER_DESC constantBufferDesc(sizeof(ModelViewProjectionConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &constantBufferDesc,
+ nullptr,
+ &m_constantBuffer
+ )
+ );
+ });
+
+ auto createCubeTask = (createPSTask && createVSTask).then([this] ()
+ {
+ Vertex v[] =
+ {
+ Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 1.0f),
+ Vertex(1.0f, -1.0f, 1.0f, 0.0f, 1.0f),
+ Vertex(1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
+ Vertex(-1.0f, 1.0f, 1.0f, 1.0f, 0.0f)
+ };
+
+ D3D11_SUBRESOURCE_DATA vertexBufferData = {0};
+ vertexBufferData.pSysMem = v;
+ vertexBufferData.SysMemPitch = 0;
+ vertexBufferData.SysMemSlicePitch = 0;
+ CD3D11_BUFFER_DESC vertexBufferDesc(sizeof(v), D3D11_BIND_VERTEX_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &vertexBufferDesc,
+ &vertexBufferData,
+ &m_vertexBuffer
+ )
+ );
+
+ DWORD indices[] =
+ {
+ // Front Face
+ 0, 2, 1,
+ 0, 3, 2,
+
+ };
+
+ m_indexCount = ARRAYSIZE(indices);
+
+ D3D11_SUBRESOURCE_DATA indexBufferData = {0};
+ indexBufferData.pSysMem = indices;
+ indexBufferData.SysMemPitch = 0;
+ indexBufferData.SysMemSlicePitch = 0;
+ CD3D11_BUFFER_DESC indexBufferDesc(sizeof(indices), D3D11_BIND_INDEX_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &indexBufferDesc,
+ &indexBufferData,
+ &m_indexBuffer
+ )
+ );
+ });
+
+ createCubeTask.then([this] ()
+ {
+ m_loadingComplete = true;
+ });
+}
+
+void QuadRenderer::CreateWindowSizeDependentResources()
+{
+ Direct3DBase::CreateWindowSizeDependentResources();
+
+ float aspectRatio = m_windowBounds.Width / m_windowBounds.Height;
+ float fovAngleY = 60.0f * (XM_PI / 180.0f);
+
+ if (aspectRatio < 1.0f)
+ {
+ fovAngleY /= aspectRatio;
+ }
+
+ XMStoreFloat4x4(
+ &m_constantBufferData.projection,
+ XMMatrixTranspose(
+ XMMatrixPerspectiveFovRH(
+ fovAngleY,
+ aspectRatio,
+ 0.01f,
+ 100.0f
+ )
+ )
+ );
+}
+
+void QuadRenderer::Update(float timeTotal, float timeDelta)
+{
+ (void) timeDelta; // Unused parameter.
+
+ XMVECTOR X = XMVectorSet(0.0f, 0.0f, .3f, 0.0f);
+ XMVECTOR Y = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f);
+ XMVECTOR Z = XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f);
+
+ XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtLH(X, Y, Z)));
+ XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY(timeTotal * XM_PIDIV4)));
+}
+
+void QuadRenderer::Render()
+{
+ Render(m_renderTargetView, m_depthStencilView);
+}
+
+void QuadRenderer::Render(Microsoft::WRL::ComPtr renderTargetView, Microsoft::WRL::ComPtr depthStencilView)
+{
+ const float black[] = {0, 0, 0, 1.0 };
+
+ m_d3dContext->ClearRenderTargetView(
+ renderTargetView.Get(),
+ black
+ );
+
+ m_d3dContext->ClearDepthStencilView(
+ depthStencilView.Get(),
+ D3D11_CLEAR_DEPTH,
+ 1.0f,
+ 0
+ );
+
+ if (m_SRV && m_loadingComplete) // Only draw the cube once it is loaded (loading is asynchronous).
+ {
+ m_d3dContext->OMSetRenderTargets(
+ 1,
+ renderTargetView.GetAddressOf(),
+ depthStencilView.Get()
+ );
+
+ m_d3dContext->UpdateSubresource(
+ m_constantBuffer.Get(),
+ 0,
+ NULL,
+ &m_constantBufferData,
+ 0,
+ 0
+ );
+
+ UINT stride = sizeof(Vertex);
+ UINT offset = 0;
+
+ m_d3dContext->IASetVertexBuffers(
+ 0,
+ 1,
+ m_vertexBuffer.GetAddressOf(),
+ &stride,
+ &offset
+ );
+
+ m_d3dContext->IASetIndexBuffer(
+ m_indexBuffer.Get(),
+ DXGI_FORMAT_R32_UINT,
+ 0
+ );
+
+ m_d3dContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+ m_d3dContext->IASetInputLayout(m_inputLayout.Get());
+
+ m_d3dContext->VSSetShader(
+ m_vertexShader.Get(),
+ nullptr,
+ 0
+ );
+
+ m_d3dContext->VSSetConstantBuffers(
+ 0,
+ 1,
+ m_constantBuffer.GetAddressOf()
+ );
+
+ m_d3dContext->PSSetShader(
+ m_pixelShader.Get(),
+ nullptr,
+ 0
+ );
+
+ m_d3dContext->PSSetShaderResources(0, 1, m_SRV.GetAddressOf());
+ m_d3dContext->PSSetSamplers(0, 1, m_QuadsTexSamplerState.GetAddressOf());
+ m_d3dContext->OMSetBlendState(m_Transparency.Get(), nullptr, 0xffffffff);
+ m_d3dContext->RSSetState(CCWcullMode.Get());
+
+ m_d3dContext->DrawIndexed(
+ m_indexCount,
+ 0,
+ 0
+ );
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.h
new file mode 100644
index 0000000000..07ba0aac76
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.h
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "Direct3DBase.h"
+#include
+
+
+struct ModelViewProjectionConstantBuffer
+{
+ DirectX::XMFLOAT4X4 model;
+ DirectX::XMFLOAT4X4 view;
+ DirectX::XMFLOAT4X4 projection;
+};
+
+struct Vertex //Overloaded Vertex Structure
+{
+ Vertex(){}
+ Vertex(float x, float y, float z,
+ float u, float v)
+ : pos(x,y,z), texCoord(u, v){}
+
+ DirectX::XMFLOAT3 pos;
+ DirectX::XMFLOAT2 texCoord;
+};
+
+// This class renders a simple quad.
+ref class QuadRenderer sealed : public Direct3DBase
+{
+public:
+ QuadRenderer();
+
+ void Update(float timeTotal = 0.0f, float timeDelta = 0.0f);
+ void CreateTextureFromByte(byte * buffer,int width,int height);
+
+ // Direct3DBase methods.
+ virtual void CreateDeviceResources() override;
+ virtual void CreateWindowSizeDependentResources() override;
+ virtual void Render() override;
+
+private:
+ void Render(Microsoft::WRL::ComPtr renderTargetView, Microsoft::WRL::ComPtr depthStencilView);
+ bool m_loadingComplete;
+ uint32 m_indexCount;
+ ModelViewProjectionConstantBuffer m_constantBufferData;
+ Microsoft::WRL::ComPtr m_inputLayout;
+ Microsoft::WRL::ComPtr m_vertexBuffer;
+ Microsoft::WRL::ComPtr m_indexBuffer;
+ Microsoft::WRL::ComPtr m_vertexShader;
+ Microsoft::WRL::ComPtr m_pixelShader;
+ Microsoft::WRL::ComPtr m_constantBuffer;
+ Microsoft::WRL::ComPtr m_Texture;
+ Microsoft::WRL::ComPtr m_SRV;
+ Microsoft::WRL::ComPtr m_QuadsTexSamplerState;
+ Microsoft::WRL::ComPtr m_Transparency;
+ Microsoft::WRL::ComPtr CCWcullMode;
+ Microsoft::WRL::ComPtr CWcullMode;
+};
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl
new file mode 100644
index 0000000000..17c7046a42
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl
@@ -0,0 +1,25 @@
+Texture2D shaderTexture;
+SamplerState SampleType;
+
+//////////////
+// TYPEDEFS //
+//////////////
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// Pixel Shader
+////////////////////////////////////////////////////////////////////////////////
+float4 main(PixelInputType input) : SV_TARGET
+{
+ float4 textureColor;
+
+
+ // Sample the pixel color from the texture using the sampler at this texture coordinate location.
+ textureColor = shaderTexture.Sample(SampleType, input.tex);
+
+ return textureColor;
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl
new file mode 100644
index 0000000000..993427a65b
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl
@@ -0,0 +1,39 @@
+cbuffer ModelViewProjectionConstantBuffer : register(b0)
+{
+ matrix model;
+ matrix view;
+ matrix projection;
+};
+
+struct VertexInputType
+{
+ float4 position : POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Vertex Shader
+////////////////////////////////////////////////////////////////////////////////
+PixelInputType main(VertexInputType input)
+{
+ PixelInputType output;
+
+ // Change the position vector to be 4 units for proper matrix calculations.
+ input.position.w = 1.0f;
+
+ // Calculate the position of the vertex against the world, view, and projection matrices.
+ output.position = mul(input.position, model);
+ output.position = mul(output.position, view);
+ output.position = mul(output.position, projection);
+ // Store the texture coordinates for the pixel shader.
+ output.tex = input.tex;
+
+ return output;
+}
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp
new file mode 100644
index 0000000000..bcb5590be1
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h
new file mode 100644
index 0000000000..124baaeda1
--- /dev/null
+++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/OcvRotatingCube.sln b/samples/wp8/OcvRotatingCube/OcvRotatingCube.sln
new file mode 100644
index 0000000000..66cc56a885
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/OcvRotatingCube.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhoneXamlDirect3DApp1Comp", "PhoneXamlDirect3DApp1\PhoneXamlDirect3DApp1Comp\PhoneXamlDirect3DApp1Comp.vcxproj", "{C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OcvRotatingCube", "PhoneXamlDirect3DApp1\PhoneXamlDirect3DApp1\OcvRotatingCube.csproj", "{CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|ARM.ActiveCfg = Debug|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|ARM.Build.0 = Debug|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|Win32.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|x86.ActiveCfg = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Debug|x86.Build.0 = Debug|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Any CPU.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|ARM.ActiveCfg = Release|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|ARM.Build.0 = Release|ARM
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Win32.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|Win32.Build.0 = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|x86.ActiveCfg = Release|Win32
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}.Release|x86.Build.0 = Release|Win32
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.ActiveCfg = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.Build.0 = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|ARM.Deploy.0 = Debug|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|Win32.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.ActiveCfg = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.Build.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Debug|x86.Deploy.0 = Debug|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.ActiveCfg = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.Build.0 = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|ARM.Deploy.0 = Release|ARM
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Mixed Platforms.Deploy.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|Win32.Deploy.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.ActiveCfg = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.Build.0 = Release|x86
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}.Release|x86.Deploy.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml
new file mode 100644
index 0000000000..1a9cadac43
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs
new file mode 100644
index 0000000000..fd2a7c8466
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/App.xaml.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Diagnostics;
+using System.Resources;
+using System.Windows;
+using System.Windows.Markup;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using PhoneXamlDirect3DApp1.Resources;
+
+namespace PhoneXamlDirect3DApp1
+{
+ public partial class App : Application
+ {
+ ///
+ /// Provides easy access to the root frame of the Phone Application.
+ ///
+ /// The root frame of the Phone Application.
+ public static PhoneApplicationFrame RootFrame { get; private set; }
+
+ ///
+ /// Constructor for the Application object.
+ ///
+ public App()
+ {
+ // Global handler for uncaught exceptions.
+ UnhandledException += Application_UnhandledException;
+
+ // Standard XAML initialization
+ InitializeComponent();
+
+ // Phone-specific initialization
+ InitializePhoneApplication();
+
+ // Language display initialization
+ InitializeLanguage();
+
+ // Show graphics profiling information while debugging.
+ if (Debugger.IsAttached)
+ {
+ // Display the current frame rate counters.
+ Application.Current.Host.Settings.EnableFrameRateCounter = true;
+
+ // Show the areas of the app that are being redrawn in each frame.
+ //Application.Current.Host.Settings.EnableRedrawRegions = true;
+
+ // Enable non-production analysis visualization mode,
+ // which shows areas of a page that are handed off to GPU with a colored overlay.
+ //Application.Current.Host.Settings.EnableCacheVisualization = true;
+
+ // Prevent the screen from turning off while under the debugger by disabling
+ // the application's idle detection.
+ // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
+ // and consume battery power when the user is not using the phone.
+ PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
+ }
+
+ }
+
+ // Code to execute when the application is launching (eg, from Start)
+ // This code will not execute when the application is reactivated
+ private void Application_Launching(object sender, LaunchingEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is activated (brought to foreground)
+ // This code will not execute when the application is first launched
+ private void Application_Activated(object sender, ActivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is deactivated (sent to background)
+ // This code will not execute when the application is closing
+ private void Application_Deactivated(object sender, DeactivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is closing (eg, user hit Back)
+ // This code will not execute when the application is deactivated
+ private void Application_Closing(object sender, ClosingEventArgs e)
+ {
+ }
+
+ // Code to execute if a navigation fails
+ private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // A navigation has failed; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ // Code to execute on Unhandled Exceptions
+ private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // An unhandled exception has occurred; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ #region Phone application initialization
+
+ // Avoid double-initialization
+ private bool phoneApplicationInitialized = false;
+
+ // Do not add any additional code to this method
+ private void InitializePhoneApplication()
+ {
+ if (phoneApplicationInitialized)
+ return;
+
+ // Create the frame but don't set it as RootVisual yet; this allows the splash
+ // screen to remain active until the application is ready to render.
+ RootFrame = new PhoneApplicationFrame();
+ RootFrame.Navigated += CompleteInitializePhoneApplication;
+
+ // Handle navigation failures
+ RootFrame.NavigationFailed += RootFrame_NavigationFailed;
+
+ // Handle reset requests for clearing the backstack
+ RootFrame.Navigated += CheckForResetNavigation;
+
+ // Ensure we don't initialize again
+ phoneApplicationInitialized = true;
+ }
+
+ // Do not add any additional code to this method
+ private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
+ {
+ // Set the root visual to allow the application to render
+ if (RootVisual != RootFrame)
+ RootVisual = RootFrame;
+
+ // Remove this handler since it is no longer needed
+ RootFrame.Navigated -= CompleteInitializePhoneApplication;
+ }
+
+ private void CheckForResetNavigation(object sender, NavigationEventArgs e)
+ {
+ // If the app has received a 'reset' navigation, then we need to check
+ // on the next navigation to see if the page stack should be reset
+ if (e.NavigationMode == NavigationMode.Reset)
+ RootFrame.Navigated += ClearBackStackAfterReset;
+ }
+
+ private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
+ {
+ // Unregister the event so it doesn't get called again
+ RootFrame.Navigated -= ClearBackStackAfterReset;
+
+ // Only clear the stack for 'new' (forward) and 'refresh' navigations
+ if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)
+ return;
+
+ // For UI consistency, clear the entire page stack
+ while (RootFrame.RemoveBackEntry() != null)
+ {
+ ; // do nothing
+ }
+ }
+
+ #endregion
+
+ // Initialize the app's font and flow direction as defined in its localized resource strings.
+ //
+ // To ensure that the font of your application is aligned with its supported languages and that the
+ // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage
+ // and ResourceFlowDirection should be initialized in each resx file to match these values with that
+ // file's culture. For example:
+ //
+ // AppResources.es-ES.resx
+ // ResourceLanguage's value should be "es-ES"
+ // ResourceFlowDirection's value should be "LeftToRight"
+ //
+ // AppResources.ar-SA.resx
+ // ResourceLanguage's value should be "ar-SA"
+ // ResourceFlowDirection's value should be "RightToLeft"
+ //
+ // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.
+ //
+ private void InitializeLanguage()
+ {
+ try
+ {
+ // Set the font to match the display language defined by the
+ // ResourceLanguage resource string for each supported language.
+ //
+ // Fall back to the font of the neutral language if the Display
+ // language of the phone is not supported.
+ //
+ // If a compiler error is hit then ResourceLanguage is missing from
+ // the resource file.
+ RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
+
+ // Set the FlowDirection of all elements under the root frame based
+ // on the ResourceFlowDirection resource string for each
+ // supported language.
+ //
+ // If a compiler error is hit then ResourceFlowDirection is missing from
+ // the resource file.
+ FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
+ RootFrame.FlowDirection = flow;
+ }
+ catch
+ {
+ // If an exception is caught here it is most likely due to either
+ // ResourceLangauge not being correctly set to a supported language
+ // code or ResourceFlowDirection is set to a value other than LeftToRight
+ // or RightToLeft.
+
+ if (Debugger.IsAttached)
+ {
+ Debugger.Break();
+ }
+
+ throw;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png
new file mode 100644
index 0000000000..f7d2e97804
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/AlignmentGrid.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png
new file mode 100644
index 0000000000..7d95d4e081
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/ApplicationIcon.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Lena.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Lena.png
new file mode 100644
index 0000000000..3e8668734a
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Lena.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png
new file mode 100644
index 0000000000..e0c59ac014
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileLarge.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png
new file mode 100644
index 0000000000..e93b89d600
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileMedium.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png
new file mode 100644
index 0000000000..550b1b5e8d
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/FlipCycleTileSmall.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png
new file mode 100644
index 0000000000..686e6b53f0
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileMediumLarge.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png
new file mode 100644
index 0000000000..d4b5ede1b5
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Assets/Tiles/IconicTileSmall.png differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs
new file mode 100644
index 0000000000..509836a952
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/LocalizedStrings.cs
@@ -0,0 +1,14 @@
+using PhoneXamlDirect3DApp1.Resources;
+
+namespace PhoneXamlDirect3DApp1
+{
+ ///
+ /// Provides access to string resources.
+ ///
+ public class LocalizedStrings
+ {
+ private static AppResources _localizedResources = new AppResources();
+
+ public AppResources LocalizedResources { get { return _localizedResources; } }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml
new file mode 100644
index 0000000000..c15ada88f8
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs
new file mode 100644
index 0000000000..69bc1eb0ad
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using PhoneXamlDirect3DApp1Comp;
+using Microsoft.Phone.Tasks;
+using System.Windows.Media.Imaging;
+using System.Threading;
+using System.Windows.Resources;
+using System.IO;
+using System.Runtime.InteropServices.WindowsRuntime;
+using Microsoft.Xna.Framework.Media;
+
+namespace PhoneXamlDirect3DApp1
+{
+ public partial class MainPage : PhoneApplicationPage
+ {
+ private Direct3DInterop m_d3dInterop = new Direct3DInterop();
+ WriteableBitmap m_bmp;
+ bool m_bInitialized = false;
+
+ // Constructor
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+
+ private void DrawingSurface_Loaded(object sender, RoutedEventArgs e)
+ {
+ // Set window bounds in dips
+ m_d3dInterop.WindowBounds = new Windows.Foundation.Size(
+ (float)DrawingSurface.ActualWidth,
+ (float)DrawingSurface.ActualHeight
+ );
+
+ // Set native resolution in pixels
+ m_d3dInterop.NativeResolution = new Windows.Foundation.Size(
+ (float)Math.Floor(DrawingSurface.ActualWidth * Application.Current.Host.Content.ScaleFactor / 100.0f + 0.5f),
+ (float)Math.Floor(DrawingSurface.ActualHeight * Application.Current.Host.Content.ScaleFactor / 100.0f + 0.5f)
+ );
+
+ // Set render resolution to the full native resolution
+ m_d3dInterop.RenderResolution = m_d3dInterop.NativeResolution;
+
+ // Hook-up native component to DrawingSurface
+ DrawingSurface.SetContentProvider(m_d3dInterop.CreateContentProvider());
+ DrawingSurface.SetManipulationHandler(m_d3dInterop);
+
+
+ Deployment.Current.Dispatcher.BeginInvoke(() =>
+ {
+ StreamResourceInfo resourceInfo = Application.GetResourceStream(new Uri("Assets/Lena.png", UriKind.Relative));
+ BitmapImage bitmap = new BitmapImage();
+ bitmap.SetSource(resourceInfo.Stream);
+ m_bmp = new WriteableBitmap(bitmap);
+ m_d3dInterop.CreateTexture(m_bmp.Pixels, m_bmp.PixelWidth, m_bmp.PixelHeight, OCVFilterType.ePreview);
+ m_bInitialized = true;
+ });
+ }
+
+
+ private void RadioButton_Checked(object sender, RoutedEventArgs e)
+ {
+ if (!m_bInitialized)
+ {
+ return;
+ }
+
+ RadioButton rb = sender as RadioButton;
+ switch (rb.Name)
+ {
+ case "Normal":
+ m_d3dInterop.CreateTexture(m_bmp.Pixels, m_bmp.PixelWidth, m_bmp.PixelHeight, OCVFilterType.ePreview);
+ break;
+
+ case "Gray":
+ m_d3dInterop.CreateTexture(m_bmp.Pixels, m_bmp.PixelWidth, m_bmp.PixelHeight, OCVFilterType.eGray);
+ break;
+
+ case "Canny":
+ m_d3dInterop.CreateTexture(m_bmp.Pixels, m_bmp.PixelWidth, m_bmp.PixelHeight, OCVFilterType.eCanny);
+ break;
+
+ case "Sepia":
+ m_d3dInterop.CreateTexture(m_bmp.Pixels, m_bmp.PixelWidth, m_bmp.PixelHeight, OCVFilterType.eSepia);
+ break;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvRotatingCube.csproj b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvRotatingCube.csproj
new file mode 100644
index 0000000000..6963fb51a0
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/OcvRotatingCube.csproj
@@ -0,0 +1,167 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {CC734B3D-D8F2-4528-B223-0E7B8A4F6CC7}
+ {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ PhoneXamlDirect3DApp1
+ PhoneXamlDirect3DApp1
+ WindowsPhone
+ v8.0
+ $(TargetFrameworkVersion)
+ true
+
+
+ true
+ true
+ OCVRotatingCube.xap
+ Properties\AppManifest.xml
+ PhoneXamlDirect3DApp1.App
+ true
+ 11.0
+ true
+
+
+ true
+ full
+ false
+ Bin\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\x86\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\x86\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\ARM\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\ARM\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+
+ App.xaml
+
+
+
+ MainPage.xaml
+
+
+
+ True
+ True
+ AppResources.resx
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+
+ Designer
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+
+
+ PhoneXamlDirect3DApp1Comp
+
+
+
+
+ PublicResXFileCodeGenerator
+ AppResources.Designer.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml
new file mode 100644
index 0000000000..a955232752
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AppManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..449662c1e1
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Resources;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PhoneXamlDirect3DApp1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PhoneXamlDirect3DApp1")]
+[assembly: AssemblyCopyright("Copyright © 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8ca838f9-f7c6-4550-9b89-59e915a2cddb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: NeutralResourcesLanguageAttribute("en-US")]
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml
new file mode 100644
index 0000000000..028949e888
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/WMAppManifest.xml
@@ -0,0 +1,43 @@
+
+
+
+
+ Assets\ApplicationIcon.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets\Tiles\FlipCycleTileSmall.png
+ 0
+ Assets\Tiles\FlipCycleTileMedium.png
+ OCVRotatingCube
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs
new file mode 100644
index 0000000000..e34b684a96
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.Designer.cs
@@ -0,0 +1,105 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17626
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace PhoneXamlDirect3DApp1.Resources
+{
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class AppResources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal AppResources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if (object.ReferenceEquals(resourceMan, null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PhoneXamlDirect3DApp1.Resources.AppResources", typeof(AppResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LeftToRight.
+ ///
+ public static string ResourceFlowDirection
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceFlowDirection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to us-EN.
+ ///
+ public static string ResourceLanguage
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceLanguage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MY APPLICATION.
+ ///
+ public static string ApplicationTitle
+ {
+ get
+ {
+ return ResourceManager.GetString("ApplicationTitle", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx
new file mode 100644
index 0000000000..38c1356d08
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Resources/AppResources.resx
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ LeftToRight
+ Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language
+
+
+ en-US
+ Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.
+
+
+ MY APPLICATION
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg
new file mode 100644
index 0000000000..566fbb05a8
Binary files /dev/null and b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/SplashScreenImage.jpg differ
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h
new file mode 100644
index 0000000000..4912f570e3
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h
@@ -0,0 +1,76 @@
+#pragma once
+
+#include
+
+// Helper class for basic timing.
+ref class BasicTimer sealed
+{
+public:
+ // Initializes internal timer values.
+ BasicTimer()
+ {
+ if (!QueryPerformanceFrequency(&m_frequency))
+ {
+ throw ref new Platform::FailureException();
+ }
+ Reset();
+ }
+
+ // Reset the timer to initial values.
+ void Reset()
+ {
+ Update();
+ m_startTime = m_currentTime;
+ m_total = 0.0f;
+ m_delta = 1.0f / 60.0f;
+ }
+
+ // Update the timer's internal values.
+ void Update()
+ {
+ if (!QueryPerformanceCounter(&m_currentTime))
+ {
+ throw ref new Platform::FailureException();
+ }
+
+ m_total = static_cast(
+ static_cast(m_currentTime.QuadPart - m_startTime.QuadPart) /
+ static_cast(m_frequency.QuadPart)
+ );
+
+ if (m_lastTime.QuadPart == m_startTime.QuadPart)
+ {
+ // If the timer was just reset, report a time delta equivalent to 60Hz frame time.
+ m_delta = 1.0f / 60.0f;
+ }
+ else
+ {
+ m_delta = static_cast(
+ static_cast(m_currentTime.QuadPart - m_lastTime.QuadPart) /
+ static_cast(m_frequency.QuadPart)
+ );
+ }
+
+ m_lastTime = m_currentTime;
+ }
+
+ // Duration in seconds between the last call to Reset() and the last call to Update().
+ property float Total
+ {
+ float get() { return m_total; }
+ }
+
+ // Duration in seconds between the previous two calls to Update().
+ property float Delta
+ {
+ float get() { return m_delta; }
+ }
+
+private:
+ LARGE_INTEGER m_frequency;
+ LARGE_INTEGER m_currentTime;
+ LARGE_INTEGER m_startTime;
+ LARGE_INTEGER m_lastTime;
+ float m_total;
+ float m_delta;
+};
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.cpp b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.cpp
new file mode 100644
index 0000000000..7eff065fd4
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.cpp
@@ -0,0 +1,416 @@
+#include "pch.h"
+#include "CubeRenderer.h"
+
+
+using namespace DirectX;
+using namespace Microsoft::WRL;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Core;
+
+CubeRenderer::CubeRenderer() :
+ m_loadingComplete(false),
+ m_indexCount(0)
+{
+}
+
+void CubeRenderer::CreateTextureFromByte(byte* buffer, int width, int height)
+{
+ int pixelSize = 4;
+
+ if (m_texture.Get() == nullptr)
+ {
+ CD3D11_TEXTURE2D_DESC textureDesc(
+ DXGI_FORMAT_B8G8R8A8_UNORM, // format
+ static_cast(width), // width
+ static_cast(height), // height
+ 1, // arraySize
+ 1, // mipLevels
+ D3D11_BIND_SHADER_RESOURCE, // bindFlags
+ D3D11_USAGE_DYNAMIC, // usage
+ D3D11_CPU_ACCESS_WRITE, // cpuaccessFlags
+ 1, // sampleCount
+ 0, // sampleQuality
+ 0 // miscFlags
+ );
+
+ D3D11_SUBRESOURCE_DATA data;
+ data.pSysMem = buffer;
+ data.SysMemPitch = pixelSize*width;
+ data.SysMemSlicePitch = pixelSize*width*height;
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &textureDesc,
+ &data,
+ m_texture.ReleaseAndGetAddressOf()
+ )
+ );
+
+ m_d3dDevice->CreateShaderResourceView(m_texture.Get(), NULL, m_SRV.ReleaseAndGetAddressOf());
+ D3D11_SAMPLER_DESC sampDesc;
+ ZeroMemory(&sampDesc, sizeof(sampDesc));
+ sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+ sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
+ sampDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
+ sampDesc.MinLOD = 0;
+ sampDesc.MaxLOD = D3D11_FLOAT32_MAX;
+ m_d3dDevice->CreateSamplerState(&sampDesc, m_cubesTexSamplerState.ReleaseAndGetAddressOf());
+ }
+ else
+ {
+ int nRowSpan = width * pixelSize;
+ D3D11_MAPPED_SUBRESOURCE mappedResource;
+ HRESULT hr = m_d3dContext->Map(m_texture.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ BYTE* mappedData = static_cast(mappedResource.pData);
+
+ for (int i = 0; i < height; ++i)
+ {
+ memcpy(mappedData + (i*mappedResource.RowPitch), buffer + (i*nRowSpan), nRowSpan);
+ }
+
+ m_d3dContext->Unmap(m_texture.Get(), 0);
+ }
+}
+
+void CubeRenderer::CreateDeviceResources()
+{
+ Direct3DBase::CreateDeviceResources();
+ D3D11_BLEND_DESC blendDesc;
+ ZeroMemory( &blendDesc, sizeof(blendDesc) );
+
+ D3D11_RENDER_TARGET_BLEND_DESC rtbd;
+ ZeroMemory( &rtbd, sizeof(rtbd) );
+
+
+ rtbd.BlendEnable = TRUE;
+ rtbd.SrcBlend = D3D11_BLEND_SRC_ALPHA;
+ rtbd.DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
+ rtbd.BlendOp = D3D11_BLEND_OP_ADD;
+ rtbd.SrcBlendAlpha = D3D11_BLEND_ONE;
+ rtbd.DestBlendAlpha = D3D11_BLEND_ZERO;
+ rtbd.BlendOpAlpha = D3D11_BLEND_OP_ADD;
+ rtbd.RenderTargetWriteMask = 0x0f;
+
+
+
+ blendDesc.AlphaToCoverageEnable = false;
+ blendDesc.RenderTarget[0] = rtbd;
+
+ m_d3dDevice->CreateBlendState(&blendDesc, &m_transparency);
+
+
+ D3D11_RASTERIZER_DESC cmdesc;
+ ZeroMemory(&cmdesc, sizeof(D3D11_RASTERIZER_DESC));
+
+ cmdesc.FillMode = D3D11_FILL_SOLID;
+ cmdesc.CullMode = D3D11_CULL_BACK;
+ cmdesc.DepthClipEnable = TRUE;
+
+
+ cmdesc.FrontCounterClockwise = true;
+ m_d3dDevice->CreateRasterizerState(&cmdesc, &m_CCWcullMode);
+
+ cmdesc.FrontCounterClockwise = false;
+ m_d3dDevice->CreateRasterizerState(&cmdesc, &m_CWcullMode);
+
+
+ auto loadVSTask = DX::ReadDataAsync("SimpleVertexShader.cso");
+ auto loadPSTask = DX::ReadDataAsync("SimplePixelShader.cso");
+
+ auto createVSTask = loadVSTask.then([this](Platform::Array^ fileData) {
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateVertexShader(
+ fileData->Data,
+ fileData->Length,
+ nullptr,
+ &m_vertexShader
+ )
+ );
+
+ const D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
+ {
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ };
+
+
+
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateInputLayout(
+ vertexDesc,
+ ARRAYSIZE(vertexDesc),
+ fileData->Data,
+ fileData->Length,
+ &m_inputLayout
+ )
+ );
+ });
+
+ auto createPSTask = loadPSTask.then([this](Platform::Array^ fileData) {
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreatePixelShader(
+ fileData->Data,
+ fileData->Length,
+ nullptr,
+ &m_pixelShader
+ )
+ );
+
+ CD3D11_BUFFER_DESC constantBufferDesc(sizeof(ModelViewProjectionConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &constantBufferDesc,
+ nullptr,
+ &m_constantBuffer
+ )
+ );
+ });
+
+ auto createCubeTask = (createPSTask && createVSTask).then([this] () {
+ Vertex v[] =
+ {
+ // Front Face
+ Vertex(-1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
+ Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 0.0f),
+ Vertex( 1.0f, 1.0f, -1.0f, 1.0f, 0.0f),
+ Vertex( 1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
+
+ // Back Face
+ Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 1.0f),
+ Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 1.0f),
+ Vertex( 1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
+ Vertex(-1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
+
+ // Top Face
+ Vertex(-1.0f, 1.0f, -1.0f, 0.0f, 1.0f),
+ Vertex(-1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
+ Vertex( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
+ Vertex( 1.0f, 1.0f, -1.0f, 1.0f, 1.0f),
+
+ // Bottom Face
+ Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
+ Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
+ Vertex( 1.0f, -1.0f, 1.0f, 0.0f, 0.0f),
+ Vertex(-1.0f, -1.0f, 1.0f, 1.0f, 0.0f),
+
+ // Left Face
+ Vertex(-1.0f, -1.0f, 1.0f, 0.0f, 1.0f),
+ Vertex(-1.0f, 1.0f, 1.0f, 0.0f, 0.0f),
+ Vertex(-1.0f, 1.0f, -1.0f, 1.0f, 0.0f),
+ Vertex(-1.0f, -1.0f, -1.0f, 1.0f, 1.0f),
+
+ // Right Face
+ Vertex( 1.0f, -1.0f, -1.0f, 0.0f, 1.0f),
+ Vertex( 1.0f, 1.0f, -1.0f, 0.0f, 0.0f),
+ Vertex( 1.0f, 1.0f, 1.0f, 1.0f, 0.0f),
+ Vertex( 1.0f, -1.0f, 1.0f, 1.0f, 1.0f),
+ };
+
+
+
+ D3D11_SUBRESOURCE_DATA vertexBufferData = {0};
+ vertexBufferData.pSysMem = v;
+ vertexBufferData.SysMemPitch = 0;
+ vertexBufferData.SysMemSlicePitch = 0;
+ CD3D11_BUFFER_DESC vertexBufferDesc(sizeof(v), D3D11_BIND_VERTEX_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &vertexBufferDesc,
+ &vertexBufferData,
+ &m_vertexBuffer
+ )
+ );
+
+ DWORD indices[] = {
+ // Front Face
+ 0, 2, 1,
+ 0, 3, 2,
+
+ // Back Face
+ 4, 6, 5,
+ 4, 7, 6,
+
+ // Top Face
+ 8, 10, 9,
+ 8, 11, 10,
+
+ // Bottom Face
+ 12, 14, 13,
+ 12, 15, 14,
+
+ // Left Face
+ 16, 18, 17,
+ 16, 19, 18,
+
+ // Right Face
+ 20, 22, 21,
+ 20, 23, 22
+ };
+
+ m_indexCount = ARRAYSIZE(indices);
+
+ D3D11_SUBRESOURCE_DATA indexBufferData = {0};
+ indexBufferData.pSysMem = indices;
+ indexBufferData.SysMemPitch = 0;
+ indexBufferData.SysMemSlicePitch = 0;
+ CD3D11_BUFFER_DESC indexBufferDesc(sizeof(indices), D3D11_BIND_INDEX_BUFFER);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateBuffer(
+ &indexBufferDesc,
+ &indexBufferData,
+ &m_indexBuffer
+ )
+ );
+ });
+
+ createCubeTask.then([this] () {
+ m_loadingComplete = true;
+ });
+}
+
+void CubeRenderer::CreateWindowSizeDependentResources()
+{
+ Direct3DBase::CreateWindowSizeDependentResources();
+
+ float aspectRatio = m_windowBounds.Width / m_windowBounds.Height;
+ float fovAngleY = 70.0f * XM_PI / 180.0f;
+ if (aspectRatio < 1.0f)
+ {
+ fovAngleY /= aspectRatio;
+ }
+
+ XMStoreFloat4x4(
+ &m_constantBufferData.projection,
+ XMMatrixTranspose(
+ XMMatrixPerspectiveFovRH(
+ fovAngleY,
+ aspectRatio,
+ 0.01f,
+ 100.0f
+ )
+ )
+ );
+}
+
+void CubeRenderer::Update(float timeTotal, float timeDelta)
+{
+ (void) timeDelta; // Unused parameter.
+
+ XMVECTOR eye = XMVectorSet(0.0f, 0.0f, 3.f, 0.0f);
+ XMVECTOR at = XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f);
+ XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
+
+ XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtRH(eye, at, up)));
+ XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY(timeTotal * XM_PIDIV4)));
+
+
+}
+
+void CubeRenderer::Render()
+{
+
+ std::lock_guard lock(m_mutex);
+ Render(m_renderTargetView, m_depthStencilView);
+}
+
+void CubeRenderer::Render(Microsoft::WRL::ComPtr renderTargetView, Microsoft::WRL::ComPtr depthStencilView)
+{
+
+ const float black[] = {0, 0, 0, 1.0 };
+ m_d3dContext->ClearRenderTargetView(
+ renderTargetView.Get(),
+ black
+ );
+
+ m_d3dContext->ClearDepthStencilView(
+ depthStencilView.Get(),
+ D3D11_CLEAR_DEPTH,
+ 1.0f,
+ 0
+ );
+
+
+
+ // Only draw the cube once it is loaded (loading is asynchronous).
+ if (!m_SRV || !m_loadingComplete)
+ {
+ return;
+ }
+
+ m_d3dContext->OMSetRenderTargets(
+ 1,
+ renderTargetView.GetAddressOf(),
+ depthStencilView.Get()
+ );
+
+ m_d3dContext->UpdateSubresource(
+ m_constantBuffer.Get(),
+ 0,
+ NULL,
+ &m_constantBufferData,
+ 0,
+ 0
+ );
+
+ UINT stride = sizeof(Vertex);
+ UINT offset = 0;
+ m_d3dContext->IASetVertexBuffers(
+ 0,
+ 1,
+ m_vertexBuffer.GetAddressOf(),
+ &stride,
+ &offset
+ );
+
+ m_d3dContext->IASetIndexBuffer(
+ m_indexBuffer.Get(),
+ DXGI_FORMAT_R32_UINT,
+ 0
+ );
+
+
+ m_d3dContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+
+ m_d3dContext->IASetInputLayout(m_inputLayout.Get());
+
+ m_d3dContext->VSSetShader(
+ m_vertexShader.Get(),
+ nullptr,
+ 0
+ );
+
+ m_d3dContext->VSSetConstantBuffers(
+ 0,
+ 1,
+ m_constantBuffer.GetAddressOf()
+ );
+
+ m_d3dContext->PSSetShader(
+ m_pixelShader.Get(),
+ nullptr,
+ 0
+ );
+
+ m_d3dContext->PSSetShaderResources( 0, 1, m_SRV.GetAddressOf());
+ m_d3dContext->PSSetSamplers( 0, 1, m_cubesTexSamplerState.GetAddressOf());
+
+ //float blendFactor[] = {0.75f, 0.75f, 0.75f, 1.0f};
+ m_d3dContext->OMSetBlendState(m_transparency.Get(), nullptr, 0xffffffff);
+
+ m_d3dContext->RSSetState(m_CCWcullMode.Get());
+ m_d3dContext->DrawIndexed(
+ m_indexCount,
+ 0,
+ 0
+ );
+
+ m_d3dContext->RSSetState(m_CWcullMode.Get());
+ m_d3dContext->DrawIndexed(
+ m_indexCount,
+ 0,
+ 0
+ );
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.h
new file mode 100644
index 0000000000..f13753673e
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.h
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "Direct3DBase.h"
+#include
+#include
+
+
+struct ModelViewProjectionConstantBuffer
+{
+ DirectX::XMFLOAT4X4 model;
+ DirectX::XMFLOAT4X4 view;
+ DirectX::XMFLOAT4X4 projection;
+};
+
+struct Vertex //Overloaded Vertex Structure
+{
+ Vertex(){}
+ Vertex(float x, float y, float z,
+ float u, float v)
+ : pos(x,y,z), texCoord(u, v){}
+
+ DirectX::XMFLOAT3 pos;
+ DirectX::XMFLOAT2 texCoord;
+};
+
+// This class renders a simple spinning cube.
+ref class CubeRenderer sealed : public Direct3DBase
+{
+public:
+ CubeRenderer();
+
+ // Direct3DBase methods.
+ virtual void CreateDeviceResources() override;
+ virtual void CreateWindowSizeDependentResources() override;
+ virtual void Render() override;
+
+ // Method for updating time-dependent objects.
+ void Update(float timeTotal, float timeDelta);
+
+ void CreateTextureFromByte(byte * buffer,int width,int height);
+private:
+ void Render(Microsoft::WRL::ComPtr renderTargetView, Microsoft::WRL::ComPtr depthStencilView);
+ bool m_loadingComplete;
+
+ Microsoft::WRL::ComPtr m_inputLayout;
+ Microsoft::WRL::ComPtr m_vertexBuffer;
+ Microsoft::WRL::ComPtr m_indexBuffer;
+ Microsoft::WRL::ComPtr m_vertexShader;
+ Microsoft::WRL::ComPtr m_pixelShader;
+ Microsoft::WRL::ComPtr m_constantBuffer;
+ Microsoft::WRL::ComPtr m_texture;
+ Microsoft::WRL::ComPtr m_SRV;
+ Microsoft::WRL::ComPtr m_cubesTexSamplerState;
+ uint32 m_indexCount;
+ ModelViewProjectionConstantBuffer m_constantBufferData;
+ std::mutex m_mutex;
+ Microsoft::WRL::ComPtr m_transparency;
+ Microsoft::WRL::ComPtr m_CCWcullMode;
+ Microsoft::WRL::ComPtr m_CWcullMode;
+
+};
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp
new file mode 100644
index 0000000000..7db27bc356
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp
@@ -0,0 +1,162 @@
+#include "pch.h"
+#include "Direct3DBase.h"
+
+using namespace DirectX;
+using namespace Microsoft::WRL;
+using namespace Windows::UI::Core;
+using namespace Windows::Foundation;
+using namespace Windows::Graphics::Display;
+
+// Constructor.
+Direct3DBase::Direct3DBase()
+{
+}
+
+// Initialize the Direct3D resources required to run.
+void Direct3DBase::Initialize()
+{
+ CreateDeviceResources();
+}
+
+// These are the resources that depend on the device.
+void Direct3DBase::CreateDeviceResources()
+{
+ // This flag adds support for surfaces with a different color channel ordering
+ // than the API default. It is required for compatibility with Direct2D.
+ UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
+
+#if defined(_DEBUG)
+ // If the project is in a debug build, enable debugging via SDK Layers with this flag.
+ creationFlags |= D3D11_CREATE_DEVICE_DEBUG;
+#endif
+
+ // This array defines the set of DirectX hardware feature levels this app will support.
+ // Note the ordering should be preserved.
+ // Don't forget to declare your application's minimum required feature level in its
+ // description. All applications are assumed to support 9.1 unless otherwise stated.
+ D3D_FEATURE_LEVEL featureLevels[] =
+ {
+ D3D_FEATURE_LEVEL_11_1,
+ D3D_FEATURE_LEVEL_11_0,
+ D3D_FEATURE_LEVEL_10_1,
+ D3D_FEATURE_LEVEL_10_0,
+ D3D_FEATURE_LEVEL_9_3
+ };
+
+ // Create the Direct3D 11 API device object and a corresponding context.
+ ComPtr device;
+ ComPtr context;
+ DX::ThrowIfFailed(
+ D3D11CreateDevice(
+ nullptr, // Specify nullptr to use the default adapter.
+ D3D_DRIVER_TYPE_HARDWARE,
+ nullptr,
+ creationFlags, // Set set debug and Direct2D compatibility flags.
+ featureLevels, // List of feature levels this app can support.
+ ARRAYSIZE(featureLevels),
+ D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION.
+ &device, // Returns the Direct3D device created.
+ &m_featureLevel, // Returns feature level of device created.
+ &context // Returns the device immediate context.
+ )
+ );
+
+ // Get the Direct3D 11.1 API device and context interfaces.
+ DX::ThrowIfFailed(
+ device.As(&m_d3dDevice)
+ );
+
+ DX::ThrowIfFailed(
+ context.As(&m_d3dContext)
+ );
+}
+
+// Allocate all memory resources that depend on the window size.
+void Direct3DBase::CreateWindowSizeDependentResources()
+{
+ // Create a descriptor for the render target buffer.
+ CD3D11_TEXTURE2D_DESC renderTargetDesc(
+ DXGI_FORMAT_B8G8R8A8_UNORM,
+ static_cast(m_renderTargetSize.Width),
+ static_cast(m_renderTargetSize.Height),
+ 1,
+ 1,
+ D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE
+ );
+ renderTargetDesc.MiscFlags = D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX | D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
+
+ // Allocate a 2-D surface as the render target buffer.
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &renderTargetDesc,
+ nullptr,
+ &m_renderTarget
+ )
+ );
+
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateRenderTargetView(
+ m_renderTarget.Get(),
+ nullptr,
+ &m_renderTargetView
+ )
+ );
+
+ // Create a depth stencil view.
+ CD3D11_TEXTURE2D_DESC depthStencilDesc(
+ DXGI_FORMAT_D24_UNORM_S8_UINT,
+ static_cast(m_renderTargetSize.Width),
+ static_cast(m_renderTargetSize.Height),
+ 1,
+ 1,
+ D3D11_BIND_DEPTH_STENCIL
+ );
+
+ ComPtr depthStencil;
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateTexture2D(
+ &depthStencilDesc,
+ nullptr,
+ &depthStencil
+ )
+ );
+
+ CD3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc(D3D11_DSV_DIMENSION_TEXTURE2D);
+ DX::ThrowIfFailed(
+ m_d3dDevice->CreateDepthStencilView(
+ depthStencil.Get(),
+ &depthStencilViewDesc,
+ &m_depthStencilView
+ )
+ );
+
+ // Set the rendering viewport to target the entire window.
+ CD3D11_VIEWPORT viewport(
+ 0.0f,
+ 0.0f,
+ m_renderTargetSize.Width,
+ m_renderTargetSize.Height
+ );
+
+ m_d3dContext->RSSetViewports(1, &viewport);
+}
+
+void Direct3DBase::UpdateForRenderResolutionChange(float width, float height)
+{
+ m_renderTargetSize.Width = width;
+ m_renderTargetSize.Height = height;
+
+ ID3D11RenderTargetView* nullViews[] = {nullptr};
+ m_d3dContext->OMSetRenderTargets(ARRAYSIZE(nullViews), nullViews, nullptr);
+ m_renderTarget = nullptr;
+ m_renderTargetView = nullptr;
+ m_depthStencilView = nullptr;
+ m_d3dContext->Flush();
+ CreateWindowSizeDependentResources();
+}
+
+void Direct3DBase::UpdateForWindowSizeChange(float width, float height)
+{
+ m_windowBounds.Width = width;
+ m_windowBounds.Height = height;
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h
new file mode 100644
index 0000000000..b4d83a7a12
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "DirectXHelper.h"
+
+// Helper class that initializes DirectX APIs for 3D rendering.
+ref class Direct3DBase abstract
+{
+internal:
+ Direct3DBase();
+
+public:
+ virtual void Initialize();
+ virtual void CreateDeviceResources();
+ virtual void CreateWindowSizeDependentResources();
+ virtual void UpdateForRenderResolutionChange(float width, float height);
+ virtual void UpdateForWindowSizeChange(float width, float height);
+ virtual void Render() = 0;
+
+internal:
+ virtual ID3D11Texture2D* GetTexture()
+ {
+ return m_renderTarget.Get();
+ }
+
+protected private:
+ // Direct3D Objects.
+ Microsoft::WRL::ComPtr m_d3dDevice;
+ Microsoft::WRL::ComPtr m_d3dContext;
+ Microsoft::WRL::ComPtr m_renderTarget;
+ Microsoft::WRL::ComPtr m_renderTargetView;
+ Microsoft::WRL::ComPtr m_depthStencilView;
+
+ // Cached renderer properties.
+ D3D_FEATURE_LEVEL m_featureLevel;
+ Windows::Foundation::Size m_renderTargetSize;
+ Windows::Foundation::Rect m_windowBounds;
+};
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp
new file mode 100644
index 0000000000..669ded9386
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp
@@ -0,0 +1,77 @@
+#include "pch.h"
+#include "Direct3DContentProvider.h"
+
+using namespace PhoneXamlDirect3DApp1Comp;
+
+Direct3DContentProvider::Direct3DContentProvider(Direct3DInterop^ controller) :
+ m_controller(controller)
+{
+ m_controller->RequestAdditionalFrame += ref new RequestAdditionalFrameHandler([=] ()
+ {
+ if (m_host)
+ {
+ m_host->RequestAdditionalFrame();
+ }
+ });
+
+ m_controller->RecreateSynchronizedTexture += ref new RecreateSynchronizedTextureHandler([=] ()
+ {
+ if (m_host)
+ {
+ m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
+ }
+ });
+}
+
+// IDrawingSurfaceContentProviderNative interface
+HRESULT Direct3DContentProvider::Connect(_In_ IDrawingSurfaceRuntimeHostNative* host)
+{
+ m_host = host;
+
+ return m_controller->Connect(host);
+}
+
+void Direct3DContentProvider::Disconnect()
+{
+ m_controller->Disconnect();
+ m_host = nullptr;
+ m_synchronizedTexture = nullptr;
+}
+
+HRESULT Direct3DContentProvider::PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty)
+{
+ return m_controller->PrepareResources(presentTargetTime, contentDirty);
+}
+
+HRESULT Direct3DContentProvider::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle)
+{
+ HRESULT hr = S_OK;
+
+ if (!m_synchronizedTexture)
+ {
+ hr = m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
+ }
+
+ // Set output parameters.
+ textureSubRectangle->left = 0.0f;
+ textureSubRectangle->top = 0.0f;
+ textureSubRectangle->right = static_cast(size->width);
+ textureSubRectangle->bottom = static_cast(size->height);
+
+ m_synchronizedTexture.CopyTo(synchronizedTexture);
+
+ // Draw to the texture.
+ if (SUCCEEDED(hr))
+ {
+ hr = m_synchronizedTexture->BeginDraw();
+
+ if (SUCCEEDED(hr))
+ {
+ hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle);
+ }
+
+ m_synchronizedTexture->EndDraw();
+ }
+
+ return hr;
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h
new file mode 100644
index 0000000000..d515c66d98
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "pch.h"
+#include
+#include
+#include
+
+#include "Direct3DInterop.h"
+
+class Direct3DContentProvider : public Microsoft::WRL::RuntimeClass<
+ Microsoft::WRL::RuntimeClassFlags,
+ ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider,
+ IDrawingSurfaceContentProviderNative>
+{
+public:
+ Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller);
+
+ void ReleaseD3DResources();
+
+ // IDrawingSurfaceContentProviderNative
+ HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host);
+ void STDMETHODCALLTYPE Disconnect();
+
+ HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty);
+ HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle);
+
+private:
+ HRESULT InitializeTexture(_In_ const DrawingSurfaceSizeF* size);
+
+ PhoneXamlDirect3DApp1Comp::Direct3DInterop^ m_controller;
+ Microsoft::WRL::ComPtr m_host;
+ Microsoft::WRL::ComPtr m_synchronizedTexture;
+};
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp
new file mode 100644
index 0000000000..197131c5a6
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp
@@ -0,0 +1,186 @@
+#include "pch.h"
+#include "Direct3DInterop.h"
+#include "Direct3DContentProvider.h"
+#include
+#include
+#include
+#include
+
+using namespace Windows::Storage::Streams;
+using namespace Microsoft::WRL;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Core;
+using namespace Microsoft::WRL;
+using namespace Windows::Phone::Graphics::Interop;
+using namespace Windows::Phone::Input::Interop;
+
+namespace PhoneXamlDirect3DApp1Comp
+{
+ void Direct3DInterop::ApplyGrayFilter(const cv::Mat& image)
+ {
+ cv::Mat intermediateMat;
+ cv::cvtColor(image, intermediateMat, CV_RGBA2GRAY);
+ cv::cvtColor(intermediateMat, image, CV_GRAY2BGRA);
+ }
+
+ void Direct3DInterop::ApplyCannyFilter(const cv::Mat& image)
+ {
+ cv::Mat intermediateMat;
+ cv::Canny(image, intermediateMat, 80, 90);
+ cv::cvtColor(intermediateMat, image, CV_GRAY2BGRA);
+ }
+
+ void Direct3DInterop::ApplySepiaFilter(const cv::Mat& image)
+ {
+ const float SepiaKernelData[16] =
+ {
+ /* B */0.131f, 0.534f, 0.272f, 0.f,
+ /* G */0.168f, 0.686f, 0.349f, 0.f,
+ /* R */0.189f, 0.769f, 0.393f, 0.f,
+ /* A */0.000f, 0.000f, 0.000f, 1.f
+ };
+
+ const cv::Mat SepiaKernel(4, 4, CV_32FC1, (void*)SepiaKernelData);
+ cv::transform(image, image, SepiaKernel);
+ }
+
+ Direct3DInterop::Direct3DInterop() :
+ m_timer(ref new BasicTimer())
+ {
+ }
+
+ IDrawingSurfaceContentProvider^ Direct3DInterop::CreateContentProvider()
+ {
+ ComPtr provider = Make(this);
+ return reinterpret_cast(provider.Detach());
+ }
+
+ // IDrawingSurfaceManipulationHandler
+ void Direct3DInterop::SetManipulationHost(DrawingSurfaceManipulationHost^ manipulationHost)
+ {
+ manipulationHost->PointerPressed +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerPressed);
+
+ manipulationHost->PointerMoved +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerMoved);
+
+ manipulationHost->PointerReleased +=
+ ref new TypedEventHandler(this, &Direct3DInterop::OnPointerReleased);
+ }
+
+ void Direct3DInterop::RenderResolution::set(Windows::Foundation::Size renderResolution)
+ {
+ if (renderResolution.Width != m_renderResolution.Width ||
+ renderResolution.Height != m_renderResolution.Height)
+ {
+ m_renderResolution = renderResolution;
+
+ if (m_renderer)
+ {
+ m_renderer->UpdateForRenderResolutionChange(m_renderResolution.Width, m_renderResolution.Height);
+ RecreateSynchronizedTexture();
+ }
+ }
+ }
+
+ // Event Handlers
+
+ void Direct3DInterop::OnPointerPressed(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ void Direct3DInterop::OnPointerMoved(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ void Direct3DInterop::OnPointerReleased(DrawingSurfaceManipulationHost^ sender, PointerEventArgs^ args)
+ {
+ // Insert your code here.
+ }
+
+ // Interface With Direct3DContentProvider
+ HRESULT Direct3DInterop::Connect(_In_ IDrawingSurfaceRuntimeHostNative* host)
+ {
+ m_renderer = ref new CubeRenderer();
+ m_renderer->Initialize();
+ m_renderer->UpdateForWindowSizeChange(WindowBounds.Width, WindowBounds.Height);
+ m_renderer->UpdateForRenderResolutionChange(m_renderResolution.Width, m_renderResolution.Height);
+
+ // Restart timer after renderer has finished initializing.
+ m_timer->Reset();
+
+ return S_OK;
+ }
+
+ void Direct3DInterop::Disconnect()
+ {
+ m_renderer = nullptr;
+ }
+
+ HRESULT Direct3DInterop::PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty)
+ {
+ *contentDirty = true;
+
+ return S_OK;
+ }
+
+ HRESULT Direct3DInterop::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle)
+ {
+ m_timer->Update();
+ m_renderer->Update(m_timer->Total, m_timer->Delta);
+ m_renderer->Render();
+
+ RequestAdditionalFrame();
+
+ return S_OK;
+ }
+
+ ID3D11Texture2D* Direct3DInterop::GetTexture()
+ {
+ return m_renderer->GetTexture();
+ }
+
+ void Direct3DInterop::CreateTexture(const Platform::Array^ buffer,int width,int height, OCVFilterType filter)
+ {
+ if (m_renderer)
+ {
+ cv::Mat Lena = cv::Mat(height, width, CV_8UC4);
+ memcpy(Lena.data, buffer->Data, 4 * height*width);
+
+ switch (filter)
+ {
+ case OCVFilterType::ePreview:
+ break;
+
+ case OCVFilterType::eGray:
+ ApplyGrayFilter(Lena);
+ break;
+
+ case OCVFilterType::eCanny:
+ ApplyCannyFilter(Lena);
+ break;
+
+ case OCVFilterType::eSepia:
+ ApplySepiaFilter(Lena);
+ break;
+ }
+
+ m_renderer->CreateTextureFromByte(Lena.data, width, height);
+ }
+ }
+
+ byte* GetPointerToPixelData( Windows::Storage::Streams::IBuffer ^ pixelBuffer)
+ {
+ // Query the IBufferByteAccess interface.
+ ComPtr bufferByteAccess;
+ reinterpret_cast( pixelBuffer)->QueryInterface(IID_PPV_ARGS(&bufferByteAccess));
+
+ // Retrieve the buffer data.
+ byte* pixels = nullptr;
+ bufferByteAccess->Buffer(&pixels);
+ return pixels;
+ }
+
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h
new file mode 100644
index 0000000000..4b80446d8a
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h
@@ -0,0 +1,80 @@
+#pragma once
+
+#include "pch.h"
+#include "BasicTimer.h"
+#include "CubeRenderer.h"
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace PhoneXamlDirect3DApp1Comp
+{
+
+public enum class OCVFilterType
+{
+ ePreview,
+ eGray,
+ eCanny,
+ eSepia,
+ eNumOCVFilterTypes
+};
+
+public delegate void RequestAdditionalFrameHandler();
+public delegate void RecreateSynchronizedTextureHandler();
+
+[Windows::Foundation::Metadata::WebHostHidden]
+public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler
+{
+public:
+ Direct3DInterop();
+
+ Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider();
+
+ // IDrawingSurfaceManipulationHandler
+ virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost);
+
+ event RequestAdditionalFrameHandler^ RequestAdditionalFrame;
+ event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture;
+
+ property Windows::Foundation::Size WindowBounds;
+ property Windows::Foundation::Size NativeResolution;
+ property Windows::Foundation::Size RenderResolution
+ {
+ Windows::Foundation::Size get(){ return m_renderResolution; }
+ void set(Windows::Foundation::Size renderResolution);
+ }
+ void CreateTexture(const Platform::Array^ buffer, int with, int height, OCVFilterType filter);
+
+
+protected:
+ // Event Handlers
+ void OnPointerPressed(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+ void OnPointerMoved(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+ void OnPointerReleased(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ sender, Windows::UI::Core::PointerEventArgs^ args);
+
+internal:
+ HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host);
+ void STDMETHODCALLTYPE Disconnect();
+ HRESULT STDMETHODCALLTYPE PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty);
+ HRESULT STDMETHODCALLTYPE GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle);
+ ID3D11Texture2D* GetTexture();
+
+private:
+ CubeRenderer^ m_renderer;
+ BasicTimer^ m_timer;
+ Windows::Foundation::Size m_renderResolution;
+
+ void ApplyGrayFilter(const cv::Mat& image);
+ void ApplyCannyFilter(const cv::Mat& image);
+ void ApplySepiaFilter(const cv::Mat& image);
+
+ void UpdateImage(const cv::Mat& image);
+
+ cv::Mat Lena;
+ unsigned int frameWidth, frameHeight;
+};
+
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h
new file mode 100644
index 0000000000..01451216b1
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h
@@ -0,0 +1,41 @@
+#pragma once
+
+#include
+#include
+#include
+
+namespace DX
+{
+ inline void ThrowIfFailed(HRESULT hr)
+ {
+ if (FAILED(hr))
+ {
+ // Set a breakpoint on this line to catch Win32 API errors.
+ throw Platform::Exception::CreateException(hr);
+ }
+ }
+
+ // Function that reads from a binary file asynchronously.
+ inline Concurrency::task^> ReadDataAsync(Platform::String^ filename)
+ {
+ using namespace Windows::Storage;
+ using namespace Concurrency;
+
+ auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
+
+ return create_task(folder->GetFileAsync(filename)).then([] (StorageFile^ file)
+ {
+ return file->OpenReadAsync();
+ }).then([] (Streams::IRandomAccessStreamWithContentType^ stream)
+ {
+ unsigned int bufferSize = static_cast(stream->Size);
+ auto fileBuffer = ref new Streams::Buffer(bufferSize);
+ return stream->ReadAsync(fileBuffer, bufferSize, Streams::InputStreamOptions::None);
+ }).then([] (Streams::IBuffer^ fileBuffer) -> Platform::Array^
+ {
+ auto fileData = ref new Platform::Array(fileBuffer->Length);
+ Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData);
+ return fileData;
+ });
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj
new file mode 100644
index 0000000000..1dc73303b8
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/PhoneXamlDirect3DApp1Comp.vcxproj
@@ -0,0 +1,196 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ ARM
+
+
+ Release
+ Win32
+
+
+ Release
+ ARM
+
+
+
+ {C0F94AFA-466F-4FC4-B5C1-6CD955F3FF88}
+ PhoneXamlDirect3DApp1Comp
+ en-US
+ 11.0
+ true
+
+
+
+
+ $(OutDir)\$(MSBuildProjectName)\
+
+ $(SolutionDir)$(Configuration)\$(MSBuildProjectName)\
+ $(SolutionDir)$(Platform)\$(Configuration)\$(MSBuildProjectName)\
+
+ false
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+
+
+
+
+
+ false
+
+
+ $(ProjectDir)..\..\..\..\..\bin\WP\8.0\x86\lib\Debug;$(ProjectDir)..\..\..\..\..\bin\WP\8.0\x86\3rdparty\lib\Debug;$(WP80ToolSetPath)lib;$(WindowsSDK_LibraryPath_x86)
+
+
+
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ $(ProjectDir)..\..\..\..\..\modules\features2d\include;$(ProjectDir)..\..\..\..\..\modules\flann\include;$(ProjectDir)..\..\..\..\..\modules\imgproc\include;$(ProjectDir)..\..\..\..\..\modules\core\include;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ opencv_core300d.lib;opencv_imgproc300d.lib;opencv_features2d300d.lib;opencv_flann300d.lib;opencv_ml300d.lib;zlibd.lib;d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\..\binWP8;$(ProjectDir);$(GeneratedFilesDir);$(IntDir);%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ d3d11.lib;%(AdditionalDependencies)
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+
+
+
+
+ Pixel
+ 4.0_level_9_3
+
+
+ Vertex
+ 4.0_level_9_3
+
+
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl
new file mode 100644
index 0000000000..17c7046a42
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimplePixelShader.hlsl
@@ -0,0 +1,25 @@
+Texture2D shaderTexture;
+SamplerState SampleType;
+
+//////////////
+// TYPEDEFS //
+//////////////
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+// Pixel Shader
+////////////////////////////////////////////////////////////////////////////////
+float4 main(PixelInputType input) : SV_TARGET
+{
+ float4 textureColor;
+
+
+ // Sample the pixel color from the texture using the sampler at this texture coordinate location.
+ textureColor = shaderTexture.Sample(SampleType, input.tex);
+
+ return textureColor;
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl
new file mode 100644
index 0000000000..993427a65b
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl
@@ -0,0 +1,39 @@
+cbuffer ModelViewProjectionConstantBuffer : register(b0)
+{
+ matrix model;
+ matrix view;
+ matrix projection;
+};
+
+struct VertexInputType
+{
+ float4 position : POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+struct PixelInputType
+{
+ float4 position : SV_POSITION;
+ float2 tex : TEXCOORD0;
+};
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Vertex Shader
+////////////////////////////////////////////////////////////////////////////////
+PixelInputType main(VertexInputType input)
+{
+ PixelInputType output;
+
+ // Change the position vector to be 4 units for proper matrix calculations.
+ input.position.w = 1.0f;
+
+ // Calculate the position of the vertex against the world, view, and projection matrices.
+ output.position = mul(input.position, model);
+ output.position = mul(output.position, view);
+ output.position = mul(output.position, projection);
+ // Store the texture coordinates for the pixel shader.
+ output.tex = input.tex;
+
+ return output;
+}
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp
new file mode 100644
index 0000000000..bcb5590be1
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h
new file mode 100644
index 0000000000..aa7847d941
--- /dev/null
+++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/pch.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#include
+#include
+#include
+#include
+#include
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp
new file mode 100644
index 0000000000..c029e839af
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp
@@ -0,0 +1,69 @@
+// OpenCVComponent.cpp
+#include "pch.h"
+#include "OpenCVComponent.h"
+
+#include
+#include
+#include
+#include
+#include
+
+using namespace OpenCVComponent;
+using namespace Platform;
+using namespace concurrency;
+using namespace Windows::Foundation;
+using namespace Windows::Foundation::Collections;
+
+void CopyIVectorToMatrix(IVector^ input, cv::Mat& mat, int size);
+void CopyMatrixToVector(const cv::Mat& mat, std::vector& vector, int size);
+
+OpenCVLib::OpenCVLib()
+{
+}
+
+IAsyncOperation^>^ OpenCVLib::ProcessAsync(IVector^ input, int width, int height)
+{
+ int size = input->Size;
+ cv::Mat mat(width, height, CV_8UC4);
+ CopyIVectorToMatrix(input, mat, size);
+
+ return create_async([=]() -> IVectorView^
+ {
+ // convert to grayscale
+ cv::Mat intermediateMat;
+ cv::cvtColor(mat, intermediateMat, CV_RGB2GRAY);
+
+ // convert to BGRA
+ cv::cvtColor(intermediateMat, mat, CV_GRAY2BGRA);
+
+ std::vector output;
+ CopyMatrixToVector(mat, output, size);
+
+ // Return the outputs as a VectorView
+ return ref new Platform::Collections::VectorView(output);
+ });
+}
+
+
+void CopyIVectorToMatrix(IVector^ input, cv::Mat& mat, int size)
+{
+ unsigned char* data = mat.data;
+ for (int i = 0; i < size; i++)
+ {
+ int value = input->GetAt(i);
+ memcpy(data, (void*) &value, 4);
+ data += 4;
+ }
+}
+
+void CopyMatrixToVector(const cv::Mat& mat, std::vector& vector, int size)
+{
+ int* data = (int*) mat.data;
+ for (int i = 0; i < size; i++)
+ {
+ vector.push_back(data[i]);
+ }
+
+}
+
+
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.h b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.h
new file mode 100644
index 0000000000..2037b70475
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include
+#include
+
+namespace OpenCVComponent
+{
+ public ref class OpenCVLib sealed
+ {
+ public:
+ OpenCVLib();
+ Windows::Foundation::IAsyncOperation^>^ ProcessAsync(Windows::Foundation::Collections::IVector^ input, int width, int height);
+ };
+}
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj
new file mode 100644
index 0000000000..36798c2510
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj
@@ -0,0 +1,156 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ ARM
+
+
+ Release
+ Win32
+
+
+ Release
+ ARM
+
+
+
+ {eadff7b8-e6c3-4f34-9b33-014b3035c595}
+ OpenCVComponent
+ en-US
+ 11.0
+ true
+
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+ DynamicLibrary
+ false
+ true
+ v110_wp80
+
+
+
+
+
+
+
+ false
+
+
+ $(ProjectDir)..\..\..\..\bin\WP\8.0\x86\lib\Debug;$(ProjectDir)..\..\..\..\bin\WP\8.0\x86\3rdparty\lib\Debug;$(WP80ToolSetPath)lib;$(WindowsSDK_LibraryPath_x86)
+ false
+
+
+
+ _CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ $(ProjectDir)..\..\..\..\modules\imgproc\include;$(ProjectDir)..\..\..\..\modules\core\include;%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+ opencv_core300d.lib;opencv_imgproc300d.lib;zlibd.lib;WindowsPhoneCore.lib;RuntimeObject.lib;PhoneAppModelHost.lib;%(AdditionalDependencies)
+
+
+
+
+ _CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\binWP8;%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_WINRT_DLL;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\binWP8;%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ _CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)
+ Use
+ pch.h
+ $(WindowsSDK_MetadataPath);$(AdditionalUsingDirectories)
+ true
+ ..\..\..\..\binWP8;%(AdditionalIncludeDirectories)
+
+
+ Console
+ false
+ ole32.lib;%(IgnoreSpecificDefaultLibraries)
+ true
+
+
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+ Create
+
+
+
+
+ true
+
+
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj.filters b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj.filters
new file mode 100644
index 0000000000..9a5b3c0140
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.vcxproj.filters
@@ -0,0 +1,21 @@
+
+
+
+
+ 5fd0e509-b6ae-4f29-bd2a-4d2cc10f3aa0
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/pch.cpp b/samples/wp8/OpenCVXaml/OpenCVComponent/pch.cpp
new file mode 100644
index 0000000000..01484ff5aa
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/pch.cpp
@@ -0,0 +1,6 @@
+//
+// pch.cpp
+// Include the standard header and generate the precompiled header.
+//
+
+#include "pch.h"
diff --git a/samples/wp8/OpenCVXaml/OpenCVComponent/pch.h b/samples/wp8/OpenCVXaml/OpenCVComponent/pch.h
new file mode 100644
index 0000000000..f815ac97bb
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVComponent/pch.h
@@ -0,0 +1,6 @@
+//
+// pch.h
+// Header for standard system include files.
+//
+
+#pragma once
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml.sln b/samples/wp8/OpenCVXaml/OpenCVXaml.sln
new file mode 100644
index 0000000000..55a0d061f8
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenCVXaml", "OpenCVXaml\OpenCVXaml.csproj", "{AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenCVComponent", "OpenCVComponent\OpenCVComponent.vcxproj", "{EADFF7B8-E6C3-4F34-9B33-014B3035C595}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|ARM.ActiveCfg = Debug|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|ARM.Build.0 = Debug|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|ARM.Deploy.0 = Debug|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Mixed Platforms.Deploy.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Win32.ActiveCfg = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Win32.Build.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|Win32.Deploy.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|x86.ActiveCfg = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|x86.Build.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Debug|x86.Deploy.0 = Debug|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|ARM.ActiveCfg = Release|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|ARM.Build.0 = Release|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|ARM.Deploy.0 = Release|ARM
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Mixed Platforms.Build.0 = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Mixed Platforms.Deploy.0 = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Win32.ActiveCfg = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Win32.Build.0 = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|Win32.Deploy.0 = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|x86.ActiveCfg = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|x86.Build.0 = Release|x86
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}.Release|x86.Deploy.0 = Release|x86
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|ARM.ActiveCfg = Debug|ARM
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|ARM.Build.0 = Debug|ARM
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|Win32.Build.0 = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|x86.ActiveCfg = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Debug|x86.Build.0 = Debug|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|Any CPU.ActiveCfg = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|ARM.ActiveCfg = Release|ARM
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|ARM.Build.0 = Release|ARM
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|Win32.ActiveCfg = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|Win32.Build.0 = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|x86.ActiveCfg = Release|Win32
+ {EADFF7B8-E6C3-4F34-9B33-014B3035C595}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml b/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml
new file mode 100644
index 0000000000..ba41001e06
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml.cs
new file mode 100644
index 0000000000..6fe3a54410
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/App.xaml.cs
@@ -0,0 +1,223 @@
+using System;
+using System.Diagnostics;
+using System.Resources;
+using System.Windows;
+using System.Windows.Markup;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using OpenCVXaml.Resources;
+
+namespace OpenCVXaml
+{
+ public partial class App : Application
+ {
+ ///
+ /// Provides easy access to the root frame of the Phone Application.
+ ///
+ /// The root frame of the Phone Application.
+ public static PhoneApplicationFrame RootFrame { get; private set; }
+
+ ///
+ /// Constructor for the Application object.
+ ///
+ public App()
+ {
+ // Global handler for uncaught exceptions.
+ UnhandledException += Application_UnhandledException;
+
+ // Standard XAML initialization
+ InitializeComponent();
+
+ // Phone-specific initialization
+ InitializePhoneApplication();
+
+ // Language display initialization
+ InitializeLanguage();
+
+ // Show graphics profiling information while debugging.
+ if (Debugger.IsAttached)
+ {
+ // Display the current frame rate counters.
+ Application.Current.Host.Settings.EnableFrameRateCounter = true;
+
+ // Show the areas of the app that are being redrawn in each frame.
+ //Application.Current.Host.Settings.EnableRedrawRegions = true;
+
+ // Enable non-production analysis visualization mode,
+ // which shows areas of a page that are handed off to GPU with a colored overlay.
+ //Application.Current.Host.Settings.EnableCacheVisualization = true;
+
+ // Prevent the screen from turning off while under the debugger by disabling
+ // the application's idle detection.
+ // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
+ // and consume battery power when the user is not using the phone.
+ PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
+ }
+
+ }
+
+ // Code to execute when the application is launching (eg, from Start)
+ // This code will not execute when the application is reactivated
+ private void Application_Launching(object sender, LaunchingEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is activated (brought to foreground)
+ // This code will not execute when the application is first launched
+ private void Application_Activated(object sender, ActivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is deactivated (sent to background)
+ // This code will not execute when the application is closing
+ private void Application_Deactivated(object sender, DeactivatedEventArgs e)
+ {
+ }
+
+ // Code to execute when the application is closing (eg, user hit Back)
+ // This code will not execute when the application is deactivated
+ private void Application_Closing(object sender, ClosingEventArgs e)
+ {
+ }
+
+ // Code to execute if a navigation fails
+ private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // A navigation has failed; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ // Code to execute on Unhandled Exceptions
+ private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
+ {
+ if (Debugger.IsAttached)
+ {
+ // An unhandled exception has occurred; break into the debugger
+ Debugger.Break();
+ }
+ }
+
+ #region Phone application initialization
+
+ // Avoid double-initialization
+ private bool phoneApplicationInitialized = false;
+
+ // Do not add any additional code to this method
+ private void InitializePhoneApplication()
+ {
+ if (phoneApplicationInitialized)
+ return;
+
+ // Create the frame but don't set it as RootVisual yet; this allows the splash
+ // screen to remain active until the application is ready to render.
+ RootFrame = new PhoneApplicationFrame();
+ RootFrame.Navigated += CompleteInitializePhoneApplication;
+
+ // Handle navigation failures
+ RootFrame.NavigationFailed += RootFrame_NavigationFailed;
+
+ // Handle reset requests for clearing the backstack
+ RootFrame.Navigated += CheckForResetNavigation;
+
+ // Ensure we don't initialize again
+ phoneApplicationInitialized = true;
+ }
+
+ // Do not add any additional code to this method
+ private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e)
+ {
+ // Set the root visual to allow the application to render
+ if (RootVisual != RootFrame)
+ RootVisual = RootFrame;
+
+ // Remove this handler since it is no longer needed
+ RootFrame.Navigated -= CompleteInitializePhoneApplication;
+ }
+
+ private void CheckForResetNavigation(object sender, NavigationEventArgs e)
+ {
+ // If the app has received a 'reset' navigation, then we need to check
+ // on the next navigation to see if the page stack should be reset
+ if (e.NavigationMode == NavigationMode.Reset)
+ RootFrame.Navigated += ClearBackStackAfterReset;
+ }
+
+ private void ClearBackStackAfterReset(object sender, NavigationEventArgs e)
+ {
+ // Unregister the event so it doesn't get called again
+ RootFrame.Navigated -= ClearBackStackAfterReset;
+
+ // Only clear the stack for 'new' (forward) and 'refresh' navigations
+ if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh)
+ return;
+
+ // For UI consistency, clear the entire page stack
+ while (RootFrame.RemoveBackEntry() != null)
+ {
+ ; // do nothing
+ }
+ }
+
+ #endregion
+
+ // Initialize the app's font and flow direction as defined in its localized resource strings.
+ //
+ // To ensure that the font of your application is aligned with its supported languages and that the
+ // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage
+ // and ResourceFlowDirection should be initialized in each resx file to match these values with that
+ // file's culture. For example:
+ //
+ // AppResources.es-ES.resx
+ // ResourceLanguage's value should be "es-ES"
+ // ResourceFlowDirection's value should be "LeftToRight"
+ //
+ // AppResources.ar-SA.resx
+ // ResourceLanguage's value should be "ar-SA"
+ // ResourceFlowDirection's value should be "RightToLeft"
+ //
+ // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072.
+ //
+ private void InitializeLanguage()
+ {
+ try
+ {
+ // Set the font to match the display language defined by the
+ // ResourceLanguage resource string for each supported language.
+ //
+ // Fall back to the font of the neutral language if the Display
+ // language of the phone is not supported.
+ //
+ // If a compiler error is hit then ResourceLanguage is missing from
+ // the resource file.
+ RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage);
+
+ // Set the FlowDirection of all elements under the root frame based
+ // on the ResourceFlowDirection resource string for each
+ // supported language.
+ //
+ // If a compiler error is hit then ResourceFlowDirection is missing from
+ // the resource file.
+ FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection);
+ RootFrame.FlowDirection = flow;
+ }
+ catch
+ {
+ // If an exception is caught here it is most likely due to either
+ // ResourceLangauge not being correctly set to a supported language
+ // code or ResourceFlowDirection is set to a value other than LeftToRight
+ // or RightToLeft.
+
+ if (Debugger.IsAttached)
+ {
+ Debugger.Break();
+ }
+
+ throw;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/AlignmentGrid.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/AlignmentGrid.png
new file mode 100644
index 0000000000..f7d2e97804
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/AlignmentGrid.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/ApplicationIcon.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/ApplicationIcon.png
new file mode 100644
index 0000000000..7d95d4e081
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/ApplicationIcon.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Lena.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Lena.png
new file mode 100644
index 0000000000..3e8668734a
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Lena.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileLarge.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileLarge.png
new file mode 100644
index 0000000000..e0c59ac014
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileLarge.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileMedium.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileMedium.png
new file mode 100644
index 0000000000..e93b89d600
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileMedium.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileSmall.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileSmall.png
new file mode 100644
index 0000000000..550b1b5e8d
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/FlipCycleTileSmall.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileMediumLarge.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileMediumLarge.png
new file mode 100644
index 0000000000..686e6b53f0
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileMediumLarge.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileSmall.png b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileSmall.png
new file mode 100644
index 0000000000..d4b5ede1b5
Binary files /dev/null and b/samples/wp8/OpenCVXaml/OpenCVXaml/Assets/Tiles/IconicTileSmall.png differ
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/LocalizedStrings.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/LocalizedStrings.cs
new file mode 100644
index 0000000000..6eff65a55f
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/LocalizedStrings.cs
@@ -0,0 +1,14 @@
+using OpenCVXaml.Resources;
+
+namespace OpenCVXaml
+{
+ ///
+ /// Provides access to string resources.
+ ///
+ public class LocalizedStrings
+ {
+ private static AppResources _localizedResources = new AppResources();
+
+ public AppResources LocalizedResources { get { return _localizedResources; } }
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml
new file mode 100644
index 0000000000..6b55b2d1a7
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs
new file mode 100644
index 0000000000..2b08a12f3d
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Navigation;
+using Microsoft.Phone.Controls;
+using Microsoft.Phone.Shell;
+using OpenCVXaml.Resources;
+using System.Windows.Media.Imaging;
+using OpenCVComponent;
+
+namespace OpenCVXaml
+{
+ public partial class MainPage : PhoneApplicationPage
+ {
+ private OpenCVLib m_opencv = new OpenCVLib();
+
+ // Constructor
+ public MainPage()
+ {
+ InitializeComponent();
+
+ // Sample code to localize the ApplicationBar
+ //BuildLocalizedApplicationBar();
+ }
+
+ private async void Button_Click(object sender, RoutedEventArgs e)
+ {
+ if (Preview.Source != null)
+ {
+ ProcessButton.IsEnabled = false;
+
+ // Get WriteableBitmap. ImageToModify is defined in MainPage.xaml
+ WriteableBitmap bitmap = new WriteableBitmap(Preview.Source as BitmapSource);
+
+ // call OpenCVLib to convert pixels to grayscale. This is an asynchronous call.
+ var pixels = await m_opencv.ProcessAsync(bitmap.Pixels, bitmap.PixelWidth, bitmap.PixelHeight);
+
+ // copy the pixels into the WriteableBitmap
+ for (int x = 0; x < bitmap.Pixels.Length; x++)
+ {
+ bitmap.Pixels[x] = pixels[x];
+ }
+
+ // Set Image object, defined in XAML, to the modified bitmap.
+ Preview.Source = bitmap;
+
+ ProcessButton.IsEnabled = true;
+ }
+ }
+
+ // Sample code for building a localized ApplicationBar
+ //private void BuildLocalizedApplicationBar()
+ //{
+ // // Set the page's ApplicationBar to a new instance of ApplicationBar.
+ // ApplicationBar = new ApplicationBar();
+
+ // // Create a new button and set the text value to the localized string from AppResources.
+ // ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
+ // appBarButton.Text = AppResources.AppBarButtonText;
+ // ApplicationBar.Buttons.Add(appBarButton);
+
+ // // Create a new menu item with the localized string from AppResources.
+ // ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
+ // ApplicationBar.MenuItems.Add(appBarMenuItem);
+ //}
+ }
+}
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/OpenCVXaml.csproj b/samples/wp8/OpenCVXaml/OpenCVXaml/OpenCVXaml.csproj
new file mode 100644
index 0000000000..c648fd3d80
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/OpenCVXaml.csproj
@@ -0,0 +1,167 @@
+
+
+
+ Debug
+ AnyCPU
+ 10.0.20506
+ 2.0
+ {AF139C56-D9C7-4AFE-8972-E5B30AABA1BC}
+ {C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+ Library
+ Properties
+ OpenCVXaml
+ OpenCVXaml
+ WindowsPhone
+ v8.0
+ $(TargetFrameworkVersion)
+ true
+
+
+ true
+ true
+ OpenCVXaml_$(Configuration)_$(Platform).xap
+ Properties\AppManifest.xml
+ OpenCVXaml.App
+ true
+ 11.0
+ true
+
+
+ true
+ full
+ false
+ Bin\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\x86\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\x86\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ true
+ full
+ false
+ Bin\ARM\Debug
+ DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ Bin\ARM\Release
+ TRACE;SILVERLIGHT;WINDOWS_PHONE
+ true
+ true
+ prompt
+ 4
+
+
+
+ App.xaml
+
+
+
+ MainPage.xaml
+
+
+
+ True
+ True
+ AppResources.resx
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+
+ Designer
+
+
+
+
+
+ PreserveNewest
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+ PublicResXFileCodeGenerator
+ AppResources.Designer.cs
+
+
+
+
+ {eadff7b8-e6c3-4f34-9b33-014b3035c595}
+ OpenCVComponent
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AppManifest.xml b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AppManifest.xml
new file mode 100644
index 0000000000..a955232752
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AppManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..52133ebc49
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs
@@ -0,0 +1,37 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Resources;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("OpenCVXaml")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("OpenCVXaml")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0ceefb1d-fe54-4732-bca5-865e13ecdbf0")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: NeutralResourcesLanguageAttribute("en-US")]
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/WMAppManifest.xml b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/WMAppManifest.xml
new file mode 100644
index 0000000000..8271a80321
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/WMAppManifest.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ Assets\ApplicationIcon.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Assets\Tiles\FlipCycleTileSmall.png
+ 0
+ Assets\Tiles\FlipCycleTileMedium.png
+ OpenCVXaml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.Designer.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.Designer.cs
new file mode 100644
index 0000000000..90bcaa939c
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.Designer.cs
@@ -0,0 +1,127 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17626
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace OpenCVXaml.Resources
+{
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class AppResources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal AppResources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if (object.ReferenceEquals(resourceMan, null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenCVXaml.Resources.AppResources", typeof(AppResources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to LeftToRight.
+ ///
+ public static string ResourceFlowDirection
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceFlowDirection", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to us-EN.
+ ///
+ public static string ResourceLanguage
+ {
+ get
+ {
+ return ResourceManager.GetString("ResourceLanguage", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to MY APPLICATION.
+ ///
+ public static string ApplicationTitle
+ {
+ get
+ {
+ return ResourceManager.GetString("ApplicationTitle", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to button.
+ ///
+ public static string AppBarButtonText
+ {
+ get
+ {
+ return ResourceManager.GetString("AppBarButtonText", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to menu item.
+ ///
+ public static string AppBarMenuItemText
+ {
+ get
+ {
+ return ResourceManager.GetString("AppBarMenuItemText", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.resx b/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.resx
new file mode 100644
index 0000000000..529a19431a
--- /dev/null
+++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Resources/AppResources.resx
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ LeftToRight
+ Controls the FlowDirection for all elements in the RootFrame. Set to the traditional direction of this resource file's language
+
+
+ en-US
+ Controls the Language and ensures that the font for all elements in the RootFrame aligns with the app's language. Set to the language code of this resource file's language.
+
+
+ MY APPLICATION
+
+
+ add
+
+
+ Menu Item
+
+
\ No newline at end of file
diff --git a/samples/wp8/readme.txt b/samples/wp8/readme.txt
new file mode 100644
index 0000000000..f8308b619b
--- /dev/null
+++ b/samples/wp8/readme.txt
@@ -0,0 +1,6 @@
+Building OpenCV Windows Phone Samples
+=====================================
+
+Samples are created to run against x86 architecture OpenCV binaries.
+
+Please follow the instructions in "platforms/winrt/readme.txt" to generate and build OpenCV for Windows Phone 8.0/8.1
\ No newline at end of file