From 530c8dc0c0f0a8864d2ea67d45655f989220e679 Mon Sep 17 00:00:00 2001 From: Maxim Kostin Date: Fri, 20 Feb 2015 19:49:10 +0300 Subject: [PATCH] Fixing 'doc' buildbot job: removing trailing whitespaces and tab indents Signed-off-by: Maxim Kostin --- platforms/winrt/build_all.bat | 80 +- platforms/winrt/readme.txt | 27 +- platforms/winrt/setup_winrt.ps1 | 32 +- .../OcvTransform/OcvImageManipulations.h | 92 --- .../OcvImageProcessing/MainPage.xaml.cpp | 2 +- samples/winrt/readme.txt | 2 +- .../PhoneTutorial/App.xaml.cpp | 146 ++-- .../winrt_universal/PhoneTutorial/App.xaml.h | 28 +- .../PhoneTutorial/MainPage.xaml.h | 18 +- .../PhoneTutorial/opencv.props | 2 +- samples/winrt_universal/readme.txt | 2 +- .../PhoneXamlDirect3DApp1/MainPage.xaml | 77 +- .../PhoneXamlDirect3DApp1/MainPage.xaml.cs | 4 +- .../Properties/AssemblyInfo.cs | 10 +- .../PhoneXamlDirect3DApp1Comp/BasicTimer.h | 130 +-- .../Direct3DBase.cpp | 244 +++--- .../PhoneXamlDirect3DApp1Comp/Direct3DBase.h | 42 +- .../Direct3DContentProvider.cpp | 90 +-- .../Direct3DContentProvider.h | 28 +- .../Direct3DInterop.cpp | 322 ++++---- .../Direct3DInterop.h | 118 +-- .../PhoneXamlDirect3DApp1Comp/DirectXHelper.h | 62 +- .../QuadRenderer.cpp | 604 +++++++------- .../PhoneXamlDirect3DApp1Comp/QuadRenderer.h | 58 +- .../SimpleVertexShader.hlsl | 8 +- .../PhoneXamlDirect3DApp1/MainPage.xaml | 55 +- .../PhoneXamlDirect3DApp1/MainPage.xaml.cs | 2 +- .../Properties/AssemblyInfo.cs | 10 +- .../PhoneXamlDirect3DApp1Comp/BasicTimer.h | 130 +-- .../CubeRenderer.cpp | 744 +++++++++--------- .../PhoneXamlDirect3DApp1Comp/CubeRenderer.h | 66 +- .../Direct3DBase.cpp | 244 +++--- .../PhoneXamlDirect3DApp1Comp/Direct3DBase.h | 42 +- .../Direct3DContentProvider.cpp | 90 +-- .../Direct3DContentProvider.h | 28 +- .../Direct3DInterop.cpp | 94 +-- .../Direct3DInterop.h | 74 +- .../PhoneXamlDirect3DApp1Comp/DirectXHelper.h | 62 +- .../SimpleVertexShader.hlsl | 8 +- .../OpenCVComponent/OpenCVComponent.cpp | 4 +- .../OpenCVXaml/OpenCVXaml/MainPage.xaml.cs | 2 +- .../OpenCVXaml/Properties/AssemblyInfo.cs | 10 +- samples/wp8/readme.txt | 2 +- 43 files changed, 1910 insertions(+), 1985 deletions(-) delete mode 100644 samples/winrt/ImageManipulations/MediaExtensions/OcvTransform/OcvImageManipulations.h diff --git a/platforms/winrt/build_all.bat b/platforms/winrt/build_all.bat index c46a6131be..40b060e692 100644 --- a/platforms/winrt/build_all.bat +++ b/platforms/winrt/build_all.bat @@ -7,7 +7,7 @@ if defined VS120COMNTOOLS ( set VSTOOLS="%VS120COMNTOOLS%" set VC_VER=120 set FOUND_VC=1 -) +) set VSTOOLS=%VSTOOLS:"=% set "VSTOOLS=%VSTOOLS:\=/%" @@ -29,45 +29,45 @@ echo. call %VSVARS% if %FOUND_VC%==1 ( - call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Release - - call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Debug - call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Debug - call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Release - call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Release + call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.1\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.1\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.1\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.1\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.1\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.1\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.1\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.1\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.0\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.0\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WP\8.0\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WP\8.0\ARM\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.0\x86\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.0\x86\INSTALL.vcxproj Release + + call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Debug + call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Debug + call:DoMSBuild ..\..\bin\WS\8.0\ARM\OpenCV.sln Release + call:DoMSBuild ..\..\bin\WS\8.0\ARM\INSTALL.vcxproj Release ) echo.&goto:EOF diff --git a/platforms/winrt/readme.txt b/platforms/winrt/readme.txt index 664be599f1..9f7d194797 100644 --- a/platforms/winrt/readme.txt +++ b/platforms/winrt/readme.txt @@ -5,15 +5,15 @@ Requirements ============ CMake 3.1.0 or higher Windows Phone/Store 8.1 Visual Studio 2013 -Windows Phone/Store 8.0 Visual Studio 2012 +Windows Phone/Store 8.0 Visual Studio 2012 For example, to be able to build all Windows Phone and Windows Store projects install the following: Install Visual Studio 2013 Community Edition - http://go.microsoft.com/?linkid=9863608 + http://go.microsoft.com/?linkid=9863608 -Install Visual Studio Express 2012 for Windows Desktop - http://www.microsoft.com/en-us/download/details.aspx?id=34673 +Install Visual Studio Express 2012 for Windows Desktop + http://www.microsoft.com/en-us/download/details.aspx?id=34673 @@ -24,11 +24,11 @@ setup_winrt.bat "WP,WS" "8.0,8.1" "x86,ARM" If everything's fine, a few minutes later you will get the following output in the opencv/bin directory: -bin - WP - 8.0 +bin + WP + 8.0 ARM - x86 + x86 8.1 ARM x86 @@ -38,7 +38,7 @@ bin x86 8.1 ARM - x86 + x86 Build the OpenCV.sln for the particular platform you are targeting. Due to the current limitations of CMake, separate x86/x64/ARM projects must be generated for each platform. @@ -48,8 +48,8 @@ You can also target a single specific configuration Or a subset of configurations setup_winrt.bat "WP,WS" "8.1" "x86" -To display the command line options for setup_winrt.bat - setup_winrt.bat -h +To display the command line options for setup_winrt.bat + setup_winrt.bat -h Note that x64 CMake generation support is as follows: ------------------------------ @@ -93,11 +93,10 @@ Windows Store 8.0 ARM cmake -G "Visual Studio 12 2013 ARM" -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=8.0 Example -======= +====================================================== To generate Windows Phone 8.1 x86 project files in the opencv/bin dir mkdir bin cd bin -cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.1 ../ - +cmake -G "Visual Studio 12 2013" -DCMAKE_SYSTEM_NAME=WindowsPhone -DCMAKE_SYSTEM_VERSION=8.1 ../ \ No newline at end of file diff --git a/platforms/winrt/setup_winrt.ps1 b/platforms/winrt/setup_winrt.ps1 index f886545b14..b7ef93dcd0 100644 --- a/platforms/winrt/setup_winrt.ps1 +++ b/platforms/winrt/setup_winrt.ps1 @@ -1,10 +1,10 @@ <# Copyright © Microsoft Open Technologies, Inc. -All Rights Reserved +All Rights Reserved Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. -You may obtain a copy of the License at +You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, @@ -110,11 +110,11 @@ function Call-MSBuild($path, $config) L "Executing: $($command)" msbuild $path /p:Configuration="$config" /m - if(-Not $?) { + if(-Not $?) { Throw "Failure executing command: $($command)" - } + } - return $true + return $true } Function Execute() { @@ -122,10 +122,10 @@ Function Execute() { ShowHelp } - # Validating arguments. + # Validating arguments. # This type of validation (rather than using ValidateSet()) is required to make .bat wrapper work - D "Input Platforms: $PLATFORMS_IN" + D "Input Platforms: $PLATFORMS_IN" $platforms = New-Object System.Collections.ArrayList $PLATFORMS_IN.Split("," ,[System.StringSplitOptions]::RemoveEmptyEntries) | ForEach { $_ = $_.Trim() @@ -133,7 +133,7 @@ Function Execute() { [void]$platforms.Add($_) D "$_ is valid" } else { - Throw "$($_) is not valid! Please use WP, WS" + Throw "$($_) is not valid! Please use WP, WS" } } D "Processed Platforms: $platforms" @@ -144,9 +144,9 @@ Function Execute() { $_ = $_.Trim() if ("8.0","8.1" -Contains $_) { [void]$versions.Add($_) - D "$_ is valid" + D "$_ is valid" } else { - Throw "$($_) is not valid! Please use 8.0, 8.1" + Throw "$($_) is not valid! Please use 8.0, 8.1" } } D "Processed Versions: $versions" @@ -159,7 +159,7 @@ Function Execute() { $architectures.Add($_) > $null D "$_ is valid" } else { - Throw "$($_) is not valid! Please use x86, x64, ARM" + Throw "$($_) is not valid! Please use x86, x64, ARM" } } D "Processed Architectures: $architectures" @@ -231,7 +231,7 @@ Function Execute() { Push-Location -Path $path L "Generating project:" - L "cmake -G $genName -DCMAKE_SYSTEM_NAME:String=$platName -DCMAKE_SYSTEM_VERSION:String=$vers -DCMAKE_VS_EFFECTIVE_PLATFORMS:String=$arch -DCMAKE_INSTALL_PREFIX:PATH=$installPath $SRC" + L "cmake -G $genName -DCMAKE_SYSTEM_NAME:String=$platName -DCMAKE_SYSTEM_VERSION:String=$vers -DCMAKE_VS_EFFECTIVE_PLATFORMS:String=$arch -DCMAKE_INSTALL_PREFIX:PATH=$installPath $SRC" cmake -G $genName -DCMAKE_SYSTEM_NAME:String=$platName -DCMAKE_SYSTEM_VERSION:String=$vers -DCMAKE_VS_EFFECTIVE_PLATFORMS:String=$arch -DCMAKE_INSTALL_PREFIX:PATH=$installPath $SRC L "-----------------------------------------------" @@ -273,8 +273,8 @@ Function Execute() { Function ShowHelp() { Write-Host "Configures OpenCV and generates projects for specified verion of Visual Studio/platforms/architectures." Write-Host "Must be executed from the sources folder containing main CMakeLists configuration." - Write-Host "Parameter keys can be shortened down to a signle symbol (e.g. '-a') and are not case sensitive." - Write-Host "Proper parameter sequensing is required when omitting keys." + Write-Host "Parameter keys can be shortened down to a single symbol (e.g. '-a') and are not case sensitive." + Write-Host "Proper parameter sequencing is required when omitting keys." Write-Host "Generates the following folder structure, depending on the supplied parameters: " Write-Host " bin/ " Write-Host " | " @@ -286,7 +286,7 @@ Function ShowHelp() { Write-Host " | | |-x86 " Write-Host " | | |-x64 " Write-Host " | | |-ARM " - Write-Host " " + Write-Host " " Write-Host " USAGE: " Write-Host " Calling:" Write-Host " PS> setup_winrt.ps1 [params]" @@ -310,7 +310,7 @@ Function ShowHelp() { Write-Host " version - Array of platform versions. " Write-Host " Default: 8.1 " Write-Host " Example: '8.0,8.1' " - Write-Host " Options: 8.0, 8.1. Available options may be limited depending on your local setup (e.g. SDK availability). " + Write-Host " Options: 8.0, 8.1. Available options may be limited depending on your local setup (e.g. SDK availability). " Write-Host " Note that you'll need to use quotes to specify more than one version. " Write-Host " architecture - Array of target architectures to build for. " Write-Host " Default: x86 " diff --git a/samples/winrt/ImageManipulations/MediaExtensions/OcvTransform/OcvImageManipulations.h b/samples/winrt/ImageManipulations/MediaExtensions/OcvTransform/OcvImageManipulations.h deleted file mode 100644 index c29b855adf..0000000000 --- a/samples/winrt/ImageManipulations/MediaExtensions/OcvTransform/OcvImageManipulations.h +++ /dev/null @@ -1,92 +0,0 @@ - - -/* this ALWAYS GENERATED file contains the definitions for the interfaces */ - - - /* File created by MIDL compiler version 8.00.0603 */ -/* at Tue Jan 20 15:16:38 2015 - */ -/* Compiler settings for C:\Users\MAXIM~1.KOS\AppData\Local\Temp\OcvImageManipulations.idl-a5dae736: - Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0603 - protocol : dce , ms_ext, c_ext, robust - error checks: allocation ref bounds_check enum stub_data - VC __declspec() decoration level: - __declspec(uuid()), __declspec(selectany), __declspec(novtable) - DECLSPEC_UUID(), MIDL_INTERFACE() -*/ -/* @@MIDL_FILE_HEADING( ) */ - -#pragma warning( disable: 4049 ) /* more than 64k source lines */ - - -/* verify that the version is high enough to compile this file*/ -#ifndef __REQUIRED_RPCNDR_H_VERSION__ -#define __REQUIRED_RPCNDR_H_VERSION__ 475 -#endif - -#include "rpc.h" -#include "rpcndr.h" - -#ifndef __RPCNDR_H_VERSION__ -#error this stub requires an updated version of -#endif // __RPCNDR_H_VERSION__ - - -#ifndef __OcvImageManipulations_h__ -#define __OcvImageManipulations_h__ - -#if defined(_MSC_VER) && (_MSC_VER >= 1020) -#pragma once -#endif - -#if defined(__cplusplus) -#if defined(__MIDL_USE_C_ENUM) -#define MIDL_ENUM enum -#else -#define MIDL_ENUM enum class -#endif -#endif - - -/* Forward Declarations */ - -/* header files for imported files */ -#include "Windows.Media.h" - -#ifdef __cplusplus -extern "C"{ -#endif - - -/* interface __MIDL_itf_OcvImageManipulations_0000_0000 */ -/* [local] */ - -#pragma warning(push) -#pragma warning(disable:4001) -#pragma once -#pragma warning(pop) -#ifndef RUNTIMECLASS_OcvTransform_OcvImageManipulations_DEFINED -#define RUNTIMECLASS_OcvTransform_OcvImageManipulations_DEFINED -extern const __declspec(selectany) _Null_terminated_ WCHAR RuntimeClass_OcvTransform_OcvImageManipulations[] = L"OcvTransform.OcvImageManipulations"; -#endif - - -/* interface __MIDL_itf_OcvImageManipulations_0000_0000 */ -/* [local] */ - - - -extern RPC_IF_HANDLE __MIDL_itf_OcvImageManipulations_0000_0000_v0_0_c_ifspec; -extern RPC_IF_HANDLE __MIDL_itf_OcvImageManipulations_0000_0000_v0_0_s_ifspec; - -/* Additional Prototypes for ALL interfaces */ - -/* end of Additional Prototypes */ - -#ifdef __cplusplus -} -#endif - -#endif - - diff --git a/samples/winrt/OcvImageProcessing/OcvImageProcessing/MainPage.xaml.cpp b/samples/winrt/OcvImageProcessing/OcvImageProcessing/MainPage.xaml.cpp index 85d6c318fd..2e91eb156b 100644 --- a/samples/winrt/OcvImageProcessing/OcvImageProcessing/MainPage.xaml.cpp +++ b/samples/winrt/OcvImageProcessing/OcvImageProcessing/MainPage.xaml.cpp @@ -131,7 +131,7 @@ cv::Mat OcvImageProcessing::MainPage::ApplyFindFeaturesFilter(const cv::Mat& ima { cv::Mat result; cv::Mat intermediateMat; - cv::Ptr detector = cv::FastFeatureDetector::create(50); + cv::Ptr detector = cv::FastFeatureDetector::create(50); std::vector features; image.copyTo(result); diff --git a/samples/winrt/readme.txt b/samples/winrt/readme.txt index 2f22658c90..53c4d7ca28 100644 --- a/samples/winrt/readme.txt +++ b/samples/winrt/readme.txt @@ -1,6 +1,6 @@ Building OpenCV WinRT Samples ============================= -Samples are created to run against x86 architecture OpenCV binaries. +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 WinRT. \ No newline at end of file diff --git a/samples/winrt_universal/PhoneTutorial/App.xaml.cpp b/samples/winrt_universal/PhoneTutorial/App.xaml.cpp index 2e8f3577ea..1e2ad733d7 100644 --- a/samples/winrt_universal/PhoneTutorial/App.xaml.cpp +++ b/samples/winrt_universal/PhoneTutorial/App.xaml.cpp @@ -31,8 +31,8 @@ using namespace Windows::UI::Xaml::Navigation; /// App::App() { - InitializeComponent(); - Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending); + InitializeComponent(); + Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending); } /// @@ -44,61 +44,61 @@ App::App() void App::OnLaunched(LaunchActivatedEventArgs^ e) { #if _DEBUG - if (IsDebuggerPresent()) - { - DebugSettings->EnableFrameRateCounter = true; - } + if (IsDebuggerPresent()) + { + DebugSettings->EnableFrameRateCounter = true; + } #endif - auto rootFrame = dynamic_cast(Window::Current->Content); - - // Do not repeat app initialization when the Window already has content, - // just ensure that the window is active. - if (rootFrame == nullptr) - { - // Create a Frame to act as the navigation context and associate it with - // a SuspensionManager key - rootFrame = ref new Frame(); - - // TODO: Change this value to a cache size that is appropriate for your application. - rootFrame->CacheSize = 1; - - if (e->PreviousExecutionState == ApplicationExecutionState::Terminated) - { - // TODO: Restore the saved session state only when appropriate, scheduling the - // final launch steps after the restore is complete. - } - - // Place the frame in the current Window - Window::Current->Content = rootFrame; - } - - if (rootFrame->Content == nullptr) - { - // Removes the turnstile navigation for startup. - if (rootFrame->ContentTransitions != nullptr) - { - _transitions = ref new TransitionCollection(); - for (auto transition : rootFrame->ContentTransitions) - { - _transitions->Append(transition); - } - } - - rootFrame->ContentTransitions = nullptr; - _firstNavigatedToken = rootFrame->Navigated += ref new NavigatedEventHandler(this, &App::RootFrame_FirstNavigated); - - // When the navigation stack isn't restored navigate to the first page, - // configuring the new page by passing required information as a navigation - // parameter. - if (!rootFrame->Navigate(MainPage::typeid, e->Arguments)) - { - throw ref new FailureException("Failed to create initial page"); - } - } - - // Ensure the current window is active - Window::Current->Activate(); + auto rootFrame = dynamic_cast(Window::Current->Content); + + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active. + if (rootFrame == nullptr) + { + // Create a Frame to act as the navigation context and associate it with + // a SuspensionManager key + rootFrame = ref new Frame(); + + // TODO: Change this value to a cache size that is appropriate for your application. + rootFrame->CacheSize = 1; + + if (e->PreviousExecutionState == ApplicationExecutionState::Terminated) + { + // TODO: Restore the saved session state only when appropriate, scheduling the + // final launch steps after the restore is complete. + } + + // Place the frame in the current Window + Window::Current->Content = rootFrame; + } + + if (rootFrame->Content == nullptr) + { + // Removes the turnstile navigation for startup. + if (rootFrame->ContentTransitions != nullptr) + { + _transitions = ref new TransitionCollection(); + for (auto transition : rootFrame->ContentTransitions) + { + _transitions->Append(transition); + } + } + + rootFrame->ContentTransitions = nullptr; + _firstNavigatedToken = rootFrame->Navigated += ref new NavigatedEventHandler(this, &App::RootFrame_FirstNavigated); + + // When the navigation stack isn't restored navigate to the first page, + // configuring the new page by passing required information as a navigation + // parameter. + if (!rootFrame->Navigate(MainPage::typeid, e->Arguments)) + { + throw ref new FailureException("Failed to create initial page"); + } + } + + // Ensure the current window is active + Window::Current->Activate(); } /// @@ -106,21 +106,21 @@ void App::OnLaunched(LaunchActivatedEventArgs^ e) /// void App::RootFrame_FirstNavigated(Object^ sender, NavigationEventArgs^ e) { - auto rootFrame = safe_cast(sender); - - TransitionCollection^ newTransitions; - if (_transitions == nullptr) - { - newTransitions = ref new TransitionCollection(); - newTransitions->Append(ref new NavigationThemeTransition()); - } - else - { - newTransitions = _transitions; - } - - rootFrame->ContentTransitions = newTransitions; - rootFrame->Navigated -= _firstNavigatedToken; + auto rootFrame = safe_cast(sender); + + TransitionCollection^ newTransitions; + if (_transitions == nullptr) + { + newTransitions = ref new TransitionCollection(); + newTransitions->Append(ref new NavigationThemeTransition()); + } + else + { + newTransitions = _transitions; + } + + rootFrame->ContentTransitions = newTransitions; + rootFrame->Navigated -= _firstNavigatedToken; } /// @@ -130,8 +130,8 @@ void App::RootFrame_FirstNavigated(Object^ sender, NavigationEventArgs^ e) /// void App::OnSuspending(Object^ sender, SuspendingEventArgs^ e) { - (void) sender; // Unused parameter - (void) e; // Unused parameter + (void) sender; // Unused parameter + (void) e; // Unused parameter - // TODO: Save application state and stop any background activity + // TODO: Save application state and stop any background activity } \ No newline at end of file diff --git a/samples/winrt_universal/PhoneTutorial/App.xaml.h b/samples/winrt_universal/PhoneTutorial/App.xaml.h index 3e68792ac6..c9a831cc32 100644 --- a/samples/winrt_universal/PhoneTutorial/App.xaml.h +++ b/samples/winrt_universal/PhoneTutorial/App.xaml.h @@ -9,21 +9,21 @@ namespace PhoneTutorial { - /// - /// Provides application-specific behavior to supplement the default Application class. - /// - ref class App sealed - { - public: - App(); + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + ref class App sealed + { + public: + App(); - virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override; + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ e) override; - private: - Windows::UI::Xaml::Media::Animation::TransitionCollection^ _transitions; - Windows::Foundation::EventRegistrationToken _firstNavigatedToken; + private: + Windows::UI::Xaml::Media::Animation::TransitionCollection^ _transitions; + Windows::Foundation::EventRegistrationToken _firstNavigatedToken; - void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e); - void RootFrame_FirstNavigated(Platform::Object^ sender, Windows::UI::Xaml::Navigation::NavigationEventArgs^ e); - }; + void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ e); + void RootFrame_FirstNavigated(Platform::Object^ sender, Windows::UI::Xaml::Navigation::NavigationEventArgs^ e); + }; } diff --git a/samples/winrt_universal/PhoneTutorial/MainPage.xaml.h b/samples/winrt_universal/PhoneTutorial/MainPage.xaml.h index 4300b35df7..4cc67e35fc 100644 --- a/samples/winrt_universal/PhoneTutorial/MainPage.xaml.h +++ b/samples/winrt_universal/PhoneTutorial/MainPage.xaml.h @@ -9,16 +9,16 @@ namespace PhoneTutorial { - /// - /// An empty page that can be used on its own or navigated to within a Frame. - /// - public ref class MainPage sealed - { - public: - MainPage(); + /// + /// An empty page that can be used on its own or navigated to within a Frame. + /// + public ref class MainPage sealed + { + public: + MainPage(); - protected: - virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; + protected: + virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override; private: Windows::UI::Xaml::Media::Imaging::WriteableBitmap^ m_bitmap; diff --git a/samples/winrt_universal/PhoneTutorial/opencv.props b/samples/winrt_universal/PhoneTutorial/opencv.props index 97b794f265..2d99ce35d3 100644 --- a/samples/winrt_universal/PhoneTutorial/opencv.props +++ b/samples/winrt_universal/PhoneTutorial/opencv.props @@ -26,6 +26,6 @@ opencv_core300$(DebugSuffix).lib;opencv_imgproc300$(DebugSuffix).lib;%(AdditionalDependencies) $(OpenCV_Lib);%(AdditionalLibraryDirectories); - + \ No newline at end of file diff --git a/samples/winrt_universal/readme.txt b/samples/winrt_universal/readme.txt index d366626f91..61c1416c26 100644 --- a/samples/winrt_universal/readme.txt +++ b/samples/winrt_universal/readme.txt @@ -1,6 +1,6 @@ Building OpenCV WinRT Universal Samples ======================================= -Samples are created to run against x86 architecture OpenCV binaries. +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 WinRT. \ No newline at end of file diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml index 4c61045469..f5bc9eae7f 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml @@ -1,42 +1,53 @@ - + - + - - - - - + + + + + - - - - + + + + - - - - + + + + diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs index 9a9f0f34a5..265c6006c8 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs @@ -88,7 +88,7 @@ namespace PhoneXamlDirect3DApp1 { try { - // These are TextBlock controls that are created in the page’s XAML file. + // 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); @@ -99,5 +99,5 @@ namespace PhoneXamlDirect3DApp1 MemoryTextBlock.Text = ex.Message; } } - } + } } \ No newline at end of file diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs index 449662c1e1..a22da51b51 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Resources; -// General Information about an assembly is controlled through the following +// 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")] @@ -15,8 +15,8 @@ using System.Resources; [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 +// 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)] @@ -26,11 +26,11 @@ using System.Resources; // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Revision and Build Numbers +// 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")] diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h index 4912f570e3..640b6cb9f0 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h @@ -6,71 +6,71 @@ 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; } - } + // 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; + 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 index 7db27bc356..351629e18a 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp @@ -15,148 +15,148 @@ Direct3DBase::Direct3DBase() // Initialize the Direct3D resources required to run. void Direct3DBase::Initialize() { - CreateDeviceResources(); + 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; + // 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; + // 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) - ); + // 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); + // 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(); + 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; + 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 index b4d83a7a12..c6f387c15b 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h @@ -6,32 +6,32 @@ ref class Direct3DBase abstract { internal: - Direct3DBase(); + 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; + 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(); - } + 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; + // 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; + // 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 index 669ded9386..f1fae3115f 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp @@ -4,74 +4,74 @@ using namespace PhoneXamlDirect3DApp1Comp; Direct3DContentProvider::Direct3DContentProvider(Direct3DInterop^ controller) : - m_controller(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); - } - }); + 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; + m_host = host; - return m_controller->Connect(host); + return m_controller->Connect(host); } void Direct3DContentProvider::Disconnect() { - m_controller->Disconnect(); - m_host = nullptr; - m_synchronizedTexture = nullptr; + 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); + return m_controller->PrepareResources(presentTargetTime, contentDirty); } HRESULT Direct3DContentProvider::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle) { - HRESULT hr = S_OK; + HRESULT hr = S_OK; + + if (!m_synchronizedTexture) + { + hr = m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture); + } - 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); - // 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); - m_synchronizedTexture.CopyTo(synchronizedTexture); + // Draw to the texture. + if (SUCCEEDED(hr)) + { + hr = m_synchronizedTexture->BeginDraw(); - // Draw to the texture. - if (SUCCEEDED(hr)) - { - hr = m_synchronizedTexture->BeginDraw(); - - if (SUCCEEDED(hr)) - { - hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle); - } + if (SUCCEEDED(hr)) + { + hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle); + } - m_synchronizedTexture->EndDraw(); - } + m_synchronizedTexture->EndDraw(); + } - return hr; + 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 index d515c66d98..13dd2d7077 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h @@ -8,26 +8,26 @@ #include "Direct3DInterop.h" class Direct3DContentProvider : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider, - IDrawingSurfaceContentProviderNative> + Microsoft::WRL::RuntimeClassFlags, + ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider, + IDrawingSurfaceContentProviderNative> { public: - Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller); + Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller); - void ReleaseD3DResources(); + void ReleaseD3DResources(); - // IDrawingSurfaceContentProviderNative - HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host); - void STDMETHODCALLTYPE Disconnect(); + // 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); + 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); + HRESULT InitializeTexture(_In_ const DrawingSurfaceSizeF* size); - PhoneXamlDirect3DApp1Comp::Direct3DInterop^ m_controller; - Microsoft::WRL::ComPtr m_host; - Microsoft::WRL::ComPtr m_synchronizedTexture; + 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 index acafc4b2c1..cb00c7d9cf 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp @@ -29,27 +29,27 @@ namespace PhoneXamlDirect3DApp1Comp { // Called each time a preview frame is available void CameraCapturePreviewSink::OnFrameAvailable( - DXGI_FORMAT format, - UINT width, - UINT height, - BYTE* pixels - ) + DXGI_FORMAT format, + UINT width, + UINT height, + BYTE* pixels + ) { - m_Direct3dInterop->UpdateFrame(pixels, width, height); + m_Direct3dInterop->UpdateFrame(pixels, width, height); } - // Called each time a captured frame is available + // Called each time a captured frame is available void CameraCaptureSampleSink::OnSampleAvailable( - ULONGLONG hnsPresentationTime, - ULONGLONG hnsSampleDuration, - DWORD cbSample, - BYTE* pSample) + ULONGLONG hnsPresentationTime, + ULONGLONG hnsSampleDuration, + DWORD cbSample, + BYTE* pSample) { } - Direct3DInterop::Direct3DInterop() + Direct3DInterop::Direct3DInterop() : m_algorithm(OCVFilterType::ePreview) , m_contentDirty(false) , m_backFrame(nullptr) @@ -84,80 +84,80 @@ namespace PhoneXamlDirect3DApp1Comp 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); - } - } + 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::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) - { + void Direct3DInterop::ApplyBlurFilter(cv::Mat* mat) + { cv::Mat intermediateMat; - cv::Ptr detector = cv::FastFeatureDetector::create(50); + // 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); @@ -168,21 +168,21 @@ namespace PhoneXamlDirect3DApp1Comp 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); - } + } + + 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() { @@ -238,75 +238,75 @@ namespace PhoneXamlDirect3DApp1Comp 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); + 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); + pCameraCaptureDeviceNative->SetPreviewSink(pCameraCapturePreviewSink); - // Set the preview format - pCameraCaptureDeviceNative->SetPreviewFormat(DXGI_FORMAT::DXGI_FORMAT_B8G8R8A8_UNORM); - } - } - ); + // 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); + // 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; + // 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; + // 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); + // 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(); - } - } - ); + // Start recording (only way to receive samples using the ICameraCaptureSampleSink interface + pAudioVideoCaptureDevice->StartRecordingToSinkAsync(); + } + } + ); } // Interface With Direct3DContentProvider @@ -339,7 +339,7 @@ namespace PhoneXamlDirect3DApp1Comp HRESULT Direct3DInterop::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle) { - m_renderer->Update(); + m_renderer->Update(); m_renderer->Render(); return S_OK; } diff --git a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h index d5773a5155..ef1058803a 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h @@ -15,16 +15,16 @@ namespace PhoneXamlDirect3DApp1Comp { - + public enum class OCVFilterType { - ePreview, - eGray, - eCanny, - eBlur, - eFindFeatures, - eSepia, - eNumOCVFilterTypes + ePreview, + eGray, + eCanny, + eBlur, + eFindFeatures, + eSepia, + eNumOCVFilterTypes }; class CameraCapturePreviewSink; @@ -37,71 +37,71 @@ public delegate void RecreateSynchronizedTextureHandler(); public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler { public: - Direct3DInterop(); + Direct3DInterop(); - Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider(); + Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider(); - // IDrawingSurfaceManipulationHandler - virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost); + // IDrawingSurfaceManipulationHandler + virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost); - event RequestAdditionalFrameHandler^ RequestAdditionalFrame; - event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture; + 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); - } + 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); + // 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(); + 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; + 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); + 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 Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags, + ICameraCapturePreviewSink> { public: void SetDelegate(Direct3DInterop^ delegate) @@ -109,20 +109,20 @@ public: m_Direct3dInterop = delegate; } - IFACEMETHODIMP_(void) OnFrameAvailable( - DXGI_FORMAT format, - UINT width, - UINT height, - BYTE* pixels); + 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 Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags, + ICameraCaptureSampleSink> { public: void SetDelegate(Direct3DInterop^ delegate) @@ -131,10 +131,10 @@ public: } IFACEMETHODIMP_(void) OnSampleAvailable( - ULONGLONG hnsPresentationTime, - ULONGLONG hnsSampleDuration, - DWORD cbSample, - BYTE* pSample); + 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 index 01451216b1..3f1a3cf418 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h @@ -6,36 +6,36 @@ 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); - } - } + 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; - }); - } + // 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/QuadRenderer.cpp b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp index df7d9b794c..2924b3c3d9 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.cpp @@ -7,247 +7,247 @@ using namespace Windows::Foundation; using namespace Windows::UI::Core; QuadRenderer::QuadRenderer() : - m_loadingComplete(false), - m_indexCount(0) + 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); - } + 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; - }); + 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 - ) - ) - ); + 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. + (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); + 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))); + XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtLH(X, Y, Z))); + XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY(timeTotal * XM_PIDIV4))); } void QuadRenderer::Render() @@ -257,84 +257,84 @@ void QuadRenderer::Render() 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 - ); - } + 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 index 07ba0aac76..433e380ca6 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.h +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/QuadRenderer.h @@ -6,51 +6,51 @@ struct ModelViewProjectionConstantBuffer { - DirectX::XMFLOAT4X4 model; - DirectX::XMFLOAT4X4 view; - DirectX::XMFLOAT4X4 projection; + 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){} + 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; + DirectX::XMFLOAT3 pos; + DirectX::XMFLOAT2 texCoord; }; // This class renders a simple quad. ref class QuadRenderer sealed : public Direct3DBase { public: - QuadRenderer(); + QuadRenderer(); - void Update(float timeTotal = 0.0f, float timeDelta = 0.0f); + 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; + // 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; + 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/SimpleVertexShader.hlsl b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl index 993427a65b..06584f6008 100644 --- a/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl +++ b/samples/wp8/OcvImageManipulation/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl @@ -1,8 +1,8 @@ cbuffer ModelViewProjectionConstantBuffer : register(b0) { - matrix model; - matrix view; - matrix projection; + matrix model; + matrix view; + matrix projection; }; struct VertexInputType @@ -34,6 +34,6 @@ PixelInputType main(VertexInputType input) 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/PhoneXamlDirect3DApp1/MainPage.xaml b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml index c15ada88f8..3c8281dfb0 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml @@ -1,30 +1,39 @@ - + - + - - - - + + + + diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs index 69bc1eb0ad..7815d01e7f 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/MainPage.xaml.cs @@ -91,5 +91,5 @@ namespace PhoneXamlDirect3DApp1 break; } } - } + } } \ No newline at end of file diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs index 449662c1e1..a22da51b51 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1/Properties/AssemblyInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Resources; -// General Information about an assembly is controlled through the following +// 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")] @@ -15,8 +15,8 @@ using System.Resources; [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 +// 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)] @@ -26,11 +26,11 @@ using System.Resources; // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Revision and Build Numbers +// 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")] diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h index 4912f570e3..640b6cb9f0 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h @@ -6,71 +6,71 @@ 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; } - } + // 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; + 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 index 7eff065fd4..3b7b61e749 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.cpp +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.cpp @@ -8,303 +8,303 @@ using namespace Windows::Foundation; using namespace Windows::UI::Core; CubeRenderer::CubeRenderer() : - m_loadingComplete(false), - m_indexCount(0) + 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); - } + 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; - }); + 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 - ) - ) - ); + 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. + (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); + 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))); + XMStoreFloat4x4(&m_constantBufferData.view, XMMatrixTranspose(XMMatrixLookAtRH(eye, at, up))); + XMStoreFloat4x4(&m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY(timeTotal * XM_PIDIV4))); } @@ -319,98 +319,98 @@ void CubeRenderer::Render() 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 - ); + 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 index f13753673e..cec5afa533 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/CubeRenderer.h @@ -7,55 +7,55 @@ struct ModelViewProjectionConstantBuffer { - DirectX::XMFLOAT4X4 model; - DirectX::XMFLOAT4X4 view; - DirectX::XMFLOAT4X4 projection; + 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){} + 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; + DirectX::XMFLOAT3 pos; + DirectX::XMFLOAT2 texCoord; }; // This class renders a simple spinning cube. ref class CubeRenderer sealed : public Direct3DBase { public: - CubeRenderer(); + CubeRenderer(); - // Direct3DBase methods. - virtual void CreateDeviceResources() override; - virtual void CreateWindowSizeDependentResources() override; + // 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); + + // 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; + 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; - + 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 index 7db27bc356..351629e18a 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.cpp @@ -15,148 +15,148 @@ Direct3DBase::Direct3DBase() // Initialize the Direct3D resources required to run. void Direct3DBase::Initialize() { - CreateDeviceResources(); + 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; + // 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; + // 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) - ); + // 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); + // 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(); + 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; + 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 index b4d83a7a12..c6f387c15b 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DBase.h @@ -6,32 +6,32 @@ ref class Direct3DBase abstract { internal: - Direct3DBase(); + 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; + 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(); - } + 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; + // 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; + // 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 index 669ded9386..f1fae3115f 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.cpp @@ -4,74 +4,74 @@ using namespace PhoneXamlDirect3DApp1Comp; Direct3DContentProvider::Direct3DContentProvider(Direct3DInterop^ controller) : - m_controller(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); - } - }); + 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; + m_host = host; - return m_controller->Connect(host); + return m_controller->Connect(host); } void Direct3DContentProvider::Disconnect() { - m_controller->Disconnect(); - m_host = nullptr; - m_synchronizedTexture = nullptr; + 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); + return m_controller->PrepareResources(presentTargetTime, contentDirty); } HRESULT Direct3DContentProvider::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle) { - HRESULT hr = S_OK; + HRESULT hr = S_OK; + + if (!m_synchronizedTexture) + { + hr = m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture); + } - 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); - // 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); - m_synchronizedTexture.CopyTo(synchronizedTexture); + // Draw to the texture. + if (SUCCEEDED(hr)) + { + hr = m_synchronizedTexture->BeginDraw(); - // Draw to the texture. - if (SUCCEEDED(hr)) - { - hr = m_synchronizedTexture->BeginDraw(); - - if (SUCCEEDED(hr)) - { - hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle); - } + if (SUCCEEDED(hr)) + { + hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle); + } - m_synchronizedTexture->EndDraw(); - } + m_synchronizedTexture->EndDraw(); + } - return hr; + 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 index d515c66d98..13dd2d7077 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DContentProvider.h @@ -8,26 +8,26 @@ #include "Direct3DInterop.h" class Direct3DContentProvider : public Microsoft::WRL::RuntimeClass< - Microsoft::WRL::RuntimeClassFlags, - ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider, - IDrawingSurfaceContentProviderNative> + Microsoft::WRL::RuntimeClassFlags, + ABI::Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider, + IDrawingSurfaceContentProviderNative> { public: - Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller); + Direct3DContentProvider(PhoneXamlDirect3DApp1Comp::Direct3DInterop^ controller); - void ReleaseD3DResources(); + void ReleaseD3DResources(); - // IDrawingSurfaceContentProviderNative - HRESULT STDMETHODCALLTYPE Connect(_In_ IDrawingSurfaceRuntimeHostNative* host); - void STDMETHODCALLTYPE Disconnect(); + // 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); + 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); + HRESULT InitializeTexture(_In_ const DrawingSurfaceSizeF* size); - PhoneXamlDirect3DApp1Comp::Direct3DInterop^ m_controller; - Microsoft::WRL::ComPtr m_host; - Microsoft::WRL::ComPtr m_synchronizedTexture; + 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 index 197131c5a6..295fed43a0 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.cpp @@ -16,33 +16,33 @@ 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); - } + 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()) @@ -144,31 +144,31 @@ namespace PhoneXamlDirect3DApp1Comp 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); + 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; + switch (filter) + { + case OCVFilterType::ePreview: + break; - case OCVFilterType::eGray: - ApplyGrayFilter(Lena); - break; + case OCVFilterType::eGray: + ApplyGrayFilter(Lena); + break; - case OCVFilterType::eCanny: - ApplyCannyFilter(Lena); - break; + case OCVFilterType::eCanny: + ApplyCannyFilter(Lena); + break; - case OCVFilterType::eSepia: - ApplySepiaFilter(Lena); - break; - } + case OCVFilterType::eSepia: + ApplySepiaFilter(Lena); + break; + } - m_renderer->CreateTextureFromByte(Lena.data, width, height); - } + m_renderer->CreateTextureFromByte(Lena.data, width, height); + } } byte* GetPointerToPixelData( Windows::Storage::Streams::IBuffer ^ pixelBuffer) diff --git a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h index 4b80446d8a..60abd58693 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/Direct3DInterop.h @@ -15,11 +15,11 @@ namespace PhoneXamlDirect3DApp1Comp public enum class OCVFilterType { - ePreview, - eGray, - eCanny, - eSepia, - eNumOCVFilterTypes + ePreview, + eGray, + eCanny, + eSepia, + eNumOCVFilterTypes }; public delegate void RequestAdditionalFrameHandler(); @@ -29,52 +29,52 @@ public delegate void RecreateSynchronizedTextureHandler(); public ref class Direct3DInterop sealed : public Windows::Phone::Input::Interop::IDrawingSurfaceManipulationHandler { public: - Direct3DInterop(); + Direct3DInterop(); - Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider(); + Windows::Phone::Graphics::Interop::IDrawingSurfaceContentProvider^ CreateContentProvider(); - // IDrawingSurfaceManipulationHandler - virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost); + // IDrawingSurfaceManipulationHandler + virtual void SetManipulationHost(Windows::Phone::Input::Interop::DrawingSurfaceManipulationHost^ manipulationHost); - event RequestAdditionalFrameHandler^ RequestAdditionalFrame; - event RecreateSynchronizedTextureHandler^ RecreateSynchronizedTexture; + 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); + 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); + // 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(); + 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; + 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 ApplyGrayFilter(const cv::Mat& image); + void ApplyCannyFilter(const cv::Mat& image); + void ApplySepiaFilter(const cv::Mat& image); - void UpdateImage(const cv::Mat& image); + void UpdateImage(const cv::Mat& image); - cv::Mat Lena; - unsigned int frameWidth, frameHeight; + 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 index 01451216b1..3f1a3cf418 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/DirectXHelper.h @@ -6,36 +6,36 @@ 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); - } - } + 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; - }); - } + // 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/SimpleVertexShader.hlsl b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl index 993427a65b..06584f6008 100644 --- a/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl +++ b/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/SimpleVertexShader.hlsl @@ -1,8 +1,8 @@ cbuffer ModelViewProjectionConstantBuffer : register(b0) { - matrix model; - matrix view; - matrix projection; + matrix model; + matrix view; + matrix projection; }; struct VertexInputType @@ -34,6 +34,6 @@ PixelInputType main(VertexInputType input) 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/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp index c029e839af..ce309d5977 100644 --- a/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp +++ b/samples/wp8/OpenCVXaml/OpenCVComponent/OpenCVComponent.cpp @@ -64,6 +64,4 @@ void CopyMatrixToVector(const cv::Mat& mat, std::vector& vector, int size) vector.push_back(data[i]); } -} - - +} \ No newline at end of file diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs index 2b08a12f3d..ed4f4f1062 100644 --- a/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs +++ b/samples/wp8/OpenCVXaml/OpenCVXaml/MainPage.xaml.cs @@ -31,7 +31,7 @@ namespace OpenCVXaml if (Preview.Source != null) { ProcessButton.IsEnabled = false; - + // Get WriteableBitmap. ImageToModify is defined in MainPage.xaml WriteableBitmap bitmap = new WriteableBitmap(Preview.Source as BitmapSource); diff --git a/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs index 52133ebc49..af7506ff3e 100644 --- a/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs +++ b/samples/wp8/OpenCVXaml/OpenCVXaml/Properties/AssemblyInfo.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Resources; -// General Information about an assembly is controlled through the following +// 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")] @@ -15,8 +15,8 @@ using System.Resources; [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 +// 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)] @@ -26,11 +26,11 @@ using System.Resources; // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Revision and Build Numbers +// 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")] diff --git a/samples/wp8/readme.txt b/samples/wp8/readme.txt index f8308b619b..c25967cd3a 100644 --- a/samples/wp8/readme.txt +++ b/samples/wp8/readme.txt @@ -1,6 +1,6 @@ Building OpenCV Windows Phone Samples ===================================== -Samples are created to run against x86 architecture OpenCV binaries. +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