diff options
| author | Dmitry Duka <[email protected]> | 2017-09-13 21:36:04 +0300 |
|---|---|---|
| committer | Dmitry Duka <[email protected]> | 2017-09-13 21:36:04 +0300 |
| commit | 0b3e42ce3124b0dd84fd16ae0cb5c85eaee41cc8 (patch) | |
| tree | a8d1b2dbb71532871e95da756eb17bcb7d09e0c3 /samples | |
| parent | Pulling latest Ansel SDK 1.4 into master (diff) | |
| download | anselsdk-0b3e42ce3124b0dd84fd16ae0cb5c85eaee41cc8.tar.xz anselsdk-0b3e42ce3124b0dd84fd16ae0cb5c85eaee41cc8.zip | |
Updating Ansel SDK to the latest revisionv1.4.339
Diffstat (limited to 'samples')
| -rw-r--r-- | samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj | 454 | ||||
| -rw-r--r-- | samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj.filters | 36 | ||||
| -rw-r--r-- | samples/AnselSDKDelayLoader/source/DelayLoader.cpp | 654 | ||||
| -rw-r--r-- | samples/AnselSDKDelayLoader/source/DelayLoader.h | 82 | ||||
| -rw-r--r-- | samples/AnselSDKIntegration/AnselSDKIntegration.cpp | 1460 | ||||
| -rw-r--r-- | samples/AnselSDKIntegration/AnselSDKIntegration.sln | 56 | ||||
| -rw-r--r-- | samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj | 502 | ||||
| -rw-r--r-- | samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj.filters | 22 | ||||
| -rw-r--r-- | samples/AnselSDKIntegration/Shaders.fx | 118 |
9 files changed, 1692 insertions, 1692 deletions
diff --git a/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj b/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj index bd22385..9956b99 100644 --- a/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj +++ b/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj @@ -1,228 +1,228 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <ItemGroup> - <ClCompile Include="source\DelayLoader.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="source\DelayLoader.h" /> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{396213D4-2D38-497D-A4F0-530E7B136874}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>AnselSDK</RootNamespace> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - <ProjectName>AnselSDKDelayLoader</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <PlatformToolset>v140</PlatformToolset> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>lib\$(Platform)\</OutDir> - <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir> - <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild> - <TargetExt>.lib</TargetExt> - <TargetName>$(ProjectName)32d</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>lib\$(Platform)\</OutDir> - <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir> - <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild> - <TargetExt>.lib</TargetExt> - <TargetName>$(ProjectName)64d</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>lib\$(Platform)\</OutDir> - <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir> - <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild> - <TargetExt>.lib</TargetExt> - <TargetName>$(ProjectName)32</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>lib\$(Platform)\</OutDir> - <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir> - <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild> - <TargetExt>.lib</TargetExt> - <TargetName>$(ProjectName)64</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <ExceptionHandling>Async</ExceptionHandling> - <SmallerTypeCheck>false</SmallerTypeCheck> - <SDLCheck>true</SDLCheck> - <ControlFlowGuard>Guard</ControlFlowGuard> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ControlFlowGuard>Guard</ControlFlowGuard> - <ExceptionHandling>Async</ExceptionHandling> - <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> - <SmallerTypeCheck>false</SmallerTypeCheck> - <SDLCheck>true</SDLCheck> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ExceptionHandling>Async</ExceptionHandling> - <SmallerTypeCheck>false</SmallerTypeCheck> - <BasicRuntimeChecks>Default</BasicRuntimeChecks> - <SDLCheck>true</SDLCheck> - <ControlFlowGuard>Guard</ControlFlowGuard> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings> - <ExceptionHandling>Async</ExceptionHandling> - <SmallerTypeCheck>false</SmallerTypeCheck> - <BasicRuntimeChecks>Default</BasicRuntimeChecks> - <SDLCheck>true</SDLCheck> - <ControlFlowGuard>Guard</ControlFlowGuard> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="source\DelayLoader.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="source\DelayLoader.h" />
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{396213D4-2D38-497D-A4F0-530E7B136874}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>AnselSDK</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ <ProjectName>AnselSDKDelayLoader</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>lib\$(Platform)\</OutDir>
+ <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
+ <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
+ <TargetExt>.lib</TargetExt>
+ <TargetName>$(ProjectName)32d</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ <OutDir>lib\$(Platform)\</OutDir>
+ <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
+ <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
+ <TargetExt>.lib</TargetExt>
+ <TargetName>$(ProjectName)64d</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>lib\$(Platform)\</OutDir>
+ <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
+ <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
+ <TargetExt>.lib</TargetExt>
+ <TargetName>$(ProjectName)32</TargetName>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ <OutDir>lib\$(Platform)\</OutDir>
+ <IntDir>intermediate\$(TargetName)\$(Platform)\$(Configuration)\</IntDir>
+ <PostBuildEventUseInBuild>true</PostBuildEventUseInBuild>
+ <TargetExt>.lib</TargetExt>
+ <TargetName>$(ProjectName)64</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <SmallerTypeCheck>false</SmallerTypeCheck>
+ <SDLCheck>true</SDLCheck>
+ <ControlFlowGuard>Guard</ControlFlowGuard>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <ControlFlowGuard>Guard</ControlFlowGuard>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <SmallerTypeCheck>false</SmallerTypeCheck>
+ <SDLCheck>true</SDLCheck>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <SmallerTypeCheck>false</SmallerTypeCheck>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <SDLCheck>true</SDLCheck>
+ <ControlFlowGuard>Guard</ControlFlowGuard>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include;source</AdditionalIncludeDirectories>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <DisableSpecificWarnings>4350;4514;4625;4626;4710;4711;4820;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ <ExceptionHandling>Async</ExceptionHandling>
+ <SmallerTypeCheck>false</SmallerTypeCheck>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <SDLCheck>true</SDLCheck>
+ <ControlFlowGuard>Guard</ControlFlowGuard>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <ImportLibrary>lib\$(Platform)\$(TargetName).lib</ImportLibrary>
+ </Link>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
</Project>
\ No newline at end of file diff --git a/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj.filters b/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj.filters index 02614af..0842bea 100644 --- a/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj.filters +++ b/samples/AnselSDKDelayLoader/AnselSDKDelayLoader.vcxproj.filters @@ -1,19 +1,19 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>h;hpp;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="source\DelayLoader.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="source\DelayLoader.h"> - <Filter>Source Files</Filter> - </ClInclude> - </ItemGroup> +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>h;hpp;cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="source\DelayLoader.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="source\DelayLoader.h">
+ <Filter>Source Files</Filter>
+ </ClInclude>
+ </ItemGroup>
</Project>
\ No newline at end of file diff --git a/samples/AnselSDKDelayLoader/source/DelayLoader.cpp b/samples/AnselSDKDelayLoader/source/DelayLoader.cpp index 362c63a..a7ec5f0 100644 --- a/samples/AnselSDKDelayLoader/source/DelayLoader.cpp +++ b/samples/AnselSDKDelayLoader/source/DelayLoader.cpp @@ -1,327 +1,327 @@ -// This code contains NVIDIA Confidential Information and is disclosed to you -// under a form of NVIDIA software license agreement provided separately to you. -// -// Notice -// NVIDIA Corporation and its licensors retain all intellectual property and -// proprietary rights in and to this software and related documentation and -// any modifications thereto. Any use, reproduction, disclosure, or -// distribution of this software and related documentation without an express -// license agreement from NVIDIA Corporation is strictly prohibited. -// -// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES -// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Information and code furnished is believed to be accurate and reliable. -// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright 2016 NVIDIA Corporation. All rights reserved. - - -#define ANSEL_SDK_DELAYLOAD -#include "DelayLoader.h" -#include <ansel/Camera.h> -#include <ansel/Hints.h> -#include <ansel/Configuration.h> -#include <ansel/UserControls.h> -#include <cmath> -#include <Windows.h> -#include <stdio.h> -#include <codecvt> - - -namespace -{ - HMODULE anselSDK = NULL; -} - -namespace ansel -{ - namespace - { - typedef SetConfigurationStatus(__cdecl *PFNSETCONFIGURATION)(const Configuration& cfg); - typedef void(__cdecl *PFNUPDATECAMERA)(Camera& camera); - typedef void(__cdecl *PFNSESSIONFUNC)(); - typedef bool(__cdecl *PFNISANSELAVAILABLE)(); - typedef void(__cdecl *PFNMARKBUFFERBIND)(BufferType, HintType, uint64_t); - typedef void(__cdecl *PFNMARKBUFFERFINISHED)(BufferType, uint64_t); - typedef UserControlStatus(__cdecl *PFNADDUSERCONTROL)(const UserControlDesc&); - typedef UserControlStatus(__cdecl *PFNSETUSERCONTROLLABELLOCALIZATION)(uint32_t, const char*, const char*); - typedef UserControlStatus(__cdecl *PFNREMOVEUSERCONTROL)(uint32_t); - typedef UserControlStatus(__cdecl *PFNGETUSERCONTROLVALUE)(uint32_t, void*); - - PFNMARKBUFFERFINISHED markBufferFinishedFunc = nullptr; - PFNMARKBUFFERBIND markBufferBindFunc = nullptr; - PFNSESSIONFUNC stopSessionFunc = nullptr; - PFNSESSIONFUNC startSessionFunc = nullptr; - PFNUPDATECAMERA updateCameraFunc = nullptr; - PFNSETCONFIGURATION setConfigurationFunc = nullptr; - PFNADDUSERCONTROL addUserControlFunc = nullptr; - PFNSETUSERCONTROLLABELLOCALIZATION setUserControlLabelLocalizationFunc = nullptr; - PFNREMOVEUSERCONTROL removeUserControlFunc = nullptr; - PFNGETUSERCONTROLVALUE getUserControlValueFunc = nullptr; - - DelayLoadStatus resolveFunctionPointers() - { - if (anselSDK == NULL) - return kDelayLoadDllNotFound; - - setConfigurationFunc = reinterpret_cast<PFNSETCONFIGURATION>(GetProcAddress(anselSDK, "setConfiguration")); - stopSessionFunc = reinterpret_cast<PFNSESSIONFUNC>(GetProcAddress(anselSDK, "stopSession")); - startSessionFunc = reinterpret_cast<PFNSESSIONFUNC>(GetProcAddress(anselSDK, "startSession")); - updateCameraFunc = reinterpret_cast<PFNUPDATECAMERA>(GetProcAddress(anselSDK, "updateCamera")); - markBufferBindFunc = reinterpret_cast<PFNMARKBUFFERBIND>(GetProcAddress(anselSDK, "markBufferBind")); - markBufferFinishedFunc = reinterpret_cast<PFNMARKBUFFERFINISHED>(GetProcAddress(anselSDK, "markBufferFinished")); - addUserControlFunc = reinterpret_cast<PFNADDUSERCONTROL>(GetProcAddress(anselSDK, "addUserControl")); - setUserControlLabelLocalizationFunc = reinterpret_cast<PFNSETUSERCONTROLLABELLOCALIZATION>(GetProcAddress(anselSDK, "setUserControlLabelLocalization")); - removeUserControlFunc = reinterpret_cast<PFNREMOVEUSERCONTROL>(GetProcAddress(anselSDK, "removeUserControl")); - getUserControlValueFunc = reinterpret_cast<PFNGETUSERCONTROLVALUE>(GetProcAddress(anselSDK, "getUserControlValue")); - - if (setConfigurationFunc == nullptr || - stopSessionFunc == nullptr || - startSessionFunc == nullptr || - updateCameraFunc == nullptr || - markBufferBindFunc == nullptr || - markBufferFinishedFunc == nullptr || - addUserControlFunc == nullptr || - setUserControlLabelLocalizationFunc == nullptr || - removeUserControlFunc == nullptr || - getUserControlValueFunc == nullptr) - return kDelayLoadIncompatibleVersion; - - return kDelayLoadOk; - } - - void makeQuaternionFromRotationMatrix(nv::Quat& q, const float r[3][3]) - { - float trace = r[0][0] + r[1][1] + r[2][2]; - - if (trace > 0.0f) { - // |w| > 1/2, may as well choose w > 1/2 - float s = sqrtf(trace + 1.0f); // 2w - - q.w = s * 0.5f; - s = 0.5f / s; // 1/(4w) - - q.x = (r[2][1] - r[1][2]) * s; - q.y = (r[0][2] - r[2][0]) * s; - q.z = (r[1][0] - r[0][1]) * s; - } - else { - // |w| <= 1/2 - int i = 0; - if (r[1][1] > r[0][0]) i = 1; - if (r[2][2] > r[i][i]) i = 2; - - int j = (1 << i) & 3; // i + 1 modulo 3. - int k = (1 << j) & 3; - - float s = sqrtf(r[i][i] - r[j][j] - r[k][k] + 1.0f); - - float* component = &q.x; - component[i] = s * 0.5f; - s = 0.5f / s; - component[j] = (r[i][j] + r[j][i]) * s; - component[k] = (r[k][i] + r[i][k]) * s; - q.w = (r[k][j] - r[j][k]) * s; - } - } - - void makeRotationMatrixFromQuaternion(float rot[3][3], const nv::Quat& q) - { - float s = 2.0f; - - float xs = q.x * s; - float ys = q.y * s; - float zs = q.z * s; - - float wx = q.w * xs; - float wy = q.w * ys; - float wz = q.w * zs; - - float xx = q.x * xs; - float xy = q.x * ys; - float xz = q.x * zs; - - float yy = q.y * ys; - float yz = q.y * zs; - float zz = q.z * zs; - - rot[0][0] = 1.0f - (yy + zz); - rot[0][1] = xy - wz; - rot[0][2] = xz + wy; - - rot[1][0] = xy + wz; - rot[1][1] = 1.0f - (xx + zz); - rot[1][2] = yz - wx; - - rot[2][0] = xz - wy; - rot[2][1] = yz + wx; - rot[2][2] = 1.0f - (xx + yy); - } - - // This may seem like a funky construct so allow me to explain. This code serves only - // one purpose: to create a signaling object that Ansel (when loaded from driver shim) - // can use to detect that a game has integrated the SDK. Note that this same object - // will also be created by the SDK DLL when loaded but this is safe since creating - // the same mutex again just provides a handle to the already existing mutex. - class SdkMutex - { - public: - SdkMutex() - { - DWORD id = GetCurrentProcessId(); - char name[MAX_PATH]; - sprintf_s(name, "NVIDIA/Ansel/%d", id); - CreateMutexA(NULL, false, name); - } - }; - - SdkMutex s_mySdkMutex; - } - - - SetConfigurationStatus setConfiguration(const Configuration& config) - { - if (setConfigurationFunc) - return setConfigurationFunc(config); - else - return kSetConfigurationSdkNotLoaded; - } - - void updateCamera(ansel::Camera& cam) - { - if (updateCameraFunc) - updateCameraFunc(cam); - } - - void stopSession() - { - if (stopSessionFunc) - stopSessionFunc(); - } - - void startSession() - { - if (startSessionFunc) - startSessionFunc(); - } - - bool isAnselAvailable() - { - // search for NvCamera32/64 DLL in the process - const char* moduleName = -#if _M_AMD64 - "NvCamera64.dll"; -#else - "NvCamera32.dll"; -#endif - - return GetModuleHandleA(moduleName) != nullptr; - } - - void markBufferBind(BufferType bufferType, HintType hintType, uint64_t threadId) - { - if (markBufferBindFunc) - markBufferBindFunc(bufferType, hintType, threadId); - } - - void markBufferFinished(BufferType bufferType, uint64_t threadId) - { - if (markBufferFinishedFunc) - markBufferFinishedFunc(bufferType, threadId); - } - - void quaternionToRotationMatrixVectors(const nv::Quat& q, nv::Vec3& right, nv::Vec3& up, nv::Vec3& forward) - { - float rot[3][3]; - makeRotationMatrixFromQuaternion(rot, q); - right = { rot[0][0], rot[1][0], rot[2][0] }; - up = { rot[0][1], rot[1][1], rot[2][1] }; - forward = { rot[0][2], rot[1][2], rot[2][2] }; - } - - void rotationMatrixVectorsToQuaternion(const nv::Vec3& right, const nv::Vec3& up, const nv::Vec3& forward, nv::Quat& q) - { - const float rot[3][3] = { - { right.x, up.x, forward.x }, - { right.y, up.y, forward.y }, - { right.z, up.z, forward.z } - }; - makeQuaternionFromRotationMatrix(q, rot); - } - - UserControlStatus addUserControl(const UserControlDesc& desc) - { - if (addUserControlFunc) - return addUserControlFunc(desc); - return UserControlStatus::kUserControlInvalidCallback; - } - - UserControlStatus setUserControlLabelLocalization(uint32_t userControlId, const char* lang, const char* labelUtf8) - { - if (setUserControlLabelLocalizationFunc) - return setUserControlLabelLocalizationFunc(userControlId, lang, labelUtf8); - return UserControlStatus::kUserControlInvalidCallback; - } - - UserControlStatus removeUserControl(uint32_t userControlId) - { - if (removeUserControlFunc) - return removeUserControlFunc(userControlId); - return UserControlStatus::kUserControlInvalidCallback; - } - - UserControlStatus getUserControlValue(uint32_t userControlId, void* value) - { - if (getUserControlValueFunc) - return getUserControlValueFunc(userControlId, value); - return UserControlStatus::kUserControlInvalidCallback; - } -} - -DelayLoadStatus loadAnselSDKLibrary(const char* pathToLibraryUtf8) -{ - if (anselSDK == NULL) - { - if (pathToLibraryUtf8) - { - // convert from utf8 to wchar_t: - std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter; - std::wstring pathWstring = converter.from_bytes(pathToLibraryUtf8); - anselSDK = LoadLibraryW(pathWstring.c_str()); - } - else - { - #if defined(_M_IX86) - #define ANSEL_BITNESS "32" - #elif defined(_M_AMD64) - #define ANSEL_BITNESS "64" - #endif - - #if defined(_DEBUG) - #define ANSEL_RUNTIME_FLAVOR "d" - #else - #define ANSEL_RUNTIME_FLAVOR "" - #endif - - const char* libName = "AnselSDK" ANSEL_BITNESS ANSEL_RUNTIME_FLAVOR ".dll"; - anselSDK = LoadLibraryA(libName); - } - - if (anselSDK == NULL) - return kDelayLoadDllNotFound; - else - return ansel::resolveFunctionPointers(); - } - - return kDelayLoadOk; -} +// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright 2016 NVIDIA Corporation. All rights reserved.
+
+
+#define ANSEL_SDK_DELAYLOAD
+#include "DelayLoader.h"
+#include <ansel/Camera.h>
+#include <ansel/Hints.h>
+#include <ansel/Configuration.h>
+#include <ansel/UserControls.h>
+#include <cmath>
+#include <Windows.h>
+#include <stdio.h>
+#include <codecvt>
+
+
+namespace
+{
+ HMODULE anselSDK = NULL;
+}
+
+namespace ansel
+{
+ namespace
+ {
+ typedef SetConfigurationStatus(__cdecl *PFNSETCONFIGURATION)(const Configuration& cfg);
+ typedef void(__cdecl *PFNUPDATECAMERA)(Camera& camera);
+ typedef void(__cdecl *PFNSESSIONFUNC)();
+ typedef bool(__cdecl *PFNISANSELAVAILABLE)();
+ typedef void(__cdecl *PFNMARKBUFFERBIND)(BufferType, HintType, uint64_t);
+ typedef void(__cdecl *PFNMARKBUFFERFINISHED)(BufferType, uint64_t);
+ typedef UserControlStatus(__cdecl *PFNADDUSERCONTROL)(const UserControlDesc&);
+ typedef UserControlStatus(__cdecl *PFNSETUSERCONTROLLABELLOCALIZATION)(uint32_t, const char*, const char*);
+ typedef UserControlStatus(__cdecl *PFNREMOVEUSERCONTROL)(uint32_t);
+ typedef UserControlStatus(__cdecl *PFNGETUSERCONTROLVALUE)(uint32_t, void*);
+
+ PFNMARKBUFFERFINISHED markBufferFinishedFunc = nullptr;
+ PFNMARKBUFFERBIND markBufferBindFunc = nullptr;
+ PFNSESSIONFUNC stopSessionFunc = nullptr;
+ PFNSESSIONFUNC startSessionFunc = nullptr;
+ PFNUPDATECAMERA updateCameraFunc = nullptr;
+ PFNSETCONFIGURATION setConfigurationFunc = nullptr;
+ PFNADDUSERCONTROL addUserControlFunc = nullptr;
+ PFNSETUSERCONTROLLABELLOCALIZATION setUserControlLabelLocalizationFunc = nullptr;
+ PFNREMOVEUSERCONTROL removeUserControlFunc = nullptr;
+ PFNGETUSERCONTROLVALUE getUserControlValueFunc = nullptr;
+
+ DelayLoadStatus resolveFunctionPointers()
+ {
+ if (anselSDK == NULL)
+ return kDelayLoadDllNotFound;
+
+ setConfigurationFunc = reinterpret_cast<PFNSETCONFIGURATION>(GetProcAddress(anselSDK, "setConfiguration"));
+ stopSessionFunc = reinterpret_cast<PFNSESSIONFUNC>(GetProcAddress(anselSDK, "stopSession"));
+ startSessionFunc = reinterpret_cast<PFNSESSIONFUNC>(GetProcAddress(anselSDK, "startSession"));
+ updateCameraFunc = reinterpret_cast<PFNUPDATECAMERA>(GetProcAddress(anselSDK, "updateCamera"));
+ markBufferBindFunc = reinterpret_cast<PFNMARKBUFFERBIND>(GetProcAddress(anselSDK, "markBufferBind"));
+ markBufferFinishedFunc = reinterpret_cast<PFNMARKBUFFERFINISHED>(GetProcAddress(anselSDK, "markBufferFinished"));
+ addUserControlFunc = reinterpret_cast<PFNADDUSERCONTROL>(GetProcAddress(anselSDK, "addUserControl"));
+ setUserControlLabelLocalizationFunc = reinterpret_cast<PFNSETUSERCONTROLLABELLOCALIZATION>(GetProcAddress(anselSDK, "setUserControlLabelLocalization"));
+ removeUserControlFunc = reinterpret_cast<PFNREMOVEUSERCONTROL>(GetProcAddress(anselSDK, "removeUserControl"));
+ getUserControlValueFunc = reinterpret_cast<PFNGETUSERCONTROLVALUE>(GetProcAddress(anselSDK, "getUserControlValue"));
+
+ if (setConfigurationFunc == nullptr ||
+ stopSessionFunc == nullptr ||
+ startSessionFunc == nullptr ||
+ updateCameraFunc == nullptr ||
+ markBufferBindFunc == nullptr ||
+ markBufferFinishedFunc == nullptr ||
+ addUserControlFunc == nullptr ||
+ setUserControlLabelLocalizationFunc == nullptr ||
+ removeUserControlFunc == nullptr ||
+ getUserControlValueFunc == nullptr)
+ return kDelayLoadIncompatibleVersion;
+
+ return kDelayLoadOk;
+ }
+
+ void makeQuaternionFromRotationMatrix(nv::Quat& q, const float r[3][3])
+ {
+ float trace = r[0][0] + r[1][1] + r[2][2];
+
+ if (trace > 0.0f) {
+ // |w| > 1/2, may as well choose w > 1/2
+ float s = sqrtf(trace + 1.0f); // 2w
+
+ q.w = s * 0.5f;
+ s = 0.5f / s; // 1/(4w)
+
+ q.x = (r[2][1] - r[1][2]) * s;
+ q.y = (r[0][2] - r[2][0]) * s;
+ q.z = (r[1][0] - r[0][1]) * s;
+ }
+ else {
+ // |w| <= 1/2
+ int i = 0;
+ if (r[1][1] > r[0][0]) i = 1;
+ if (r[2][2] > r[i][i]) i = 2;
+
+ int j = (1 << i) & 3; // i + 1 modulo 3.
+ int k = (1 << j) & 3;
+
+ float s = sqrtf(r[i][i] - r[j][j] - r[k][k] + 1.0f);
+
+ float* component = &q.x;
+ component[i] = s * 0.5f;
+ s = 0.5f / s;
+ component[j] = (r[i][j] + r[j][i]) * s;
+ component[k] = (r[k][i] + r[i][k]) * s;
+ q.w = (r[k][j] - r[j][k]) * s;
+ }
+ }
+
+ void makeRotationMatrixFromQuaternion(float rot[3][3], const nv::Quat& q)
+ {
+ float s = 2.0f;
+
+ float xs = q.x * s;
+ float ys = q.y * s;
+ float zs = q.z * s;
+
+ float wx = q.w * xs;
+ float wy = q.w * ys;
+ float wz = q.w * zs;
+
+ float xx = q.x * xs;
+ float xy = q.x * ys;
+ float xz = q.x * zs;
+
+ float yy = q.y * ys;
+ float yz = q.y * zs;
+ float zz = q.z * zs;
+
+ rot[0][0] = 1.0f - (yy + zz);
+ rot[0][1] = xy - wz;
+ rot[0][2] = xz + wy;
+
+ rot[1][0] = xy + wz;
+ rot[1][1] = 1.0f - (xx + zz);
+ rot[1][2] = yz - wx;
+
+ rot[2][0] = xz - wy;
+ rot[2][1] = yz + wx;
+ rot[2][2] = 1.0f - (xx + yy);
+ }
+
+ // This may seem like a funky construct so allow me to explain. This code serves only
+ // one purpose: to create a signaling object that Ansel (when loaded from driver shim)
+ // can use to detect that a game has integrated the SDK. Note that this same object
+ // will also be created by the SDK DLL when loaded but this is safe since creating
+ // the same mutex again just provides a handle to the already existing mutex.
+ class SdkMutex
+ {
+ public:
+ SdkMutex()
+ {
+ DWORD id = GetCurrentProcessId();
+ char name[MAX_PATH];
+ sprintf_s(name, "NVIDIA/Ansel/%d", id);
+ CreateMutexA(NULL, false, name);
+ }
+ };
+
+ SdkMutex s_mySdkMutex;
+ }
+
+
+ SetConfigurationStatus setConfiguration(const Configuration& config)
+ {
+ if (setConfigurationFunc)
+ return setConfigurationFunc(config);
+ else
+ return kSetConfigurationSdkNotLoaded;
+ }
+
+ void updateCamera(ansel::Camera& cam)
+ {
+ if (updateCameraFunc)
+ updateCameraFunc(cam);
+ }
+
+ void stopSession()
+ {
+ if (stopSessionFunc)
+ stopSessionFunc();
+ }
+
+ void startSession()
+ {
+ if (startSessionFunc)
+ startSessionFunc();
+ }
+
+ bool isAnselAvailable()
+ {
+ // search for NvCamera32/64 DLL in the process
+ const char* moduleName =
+#if _M_AMD64
+ "NvCamera64.dll";
+#else
+ "NvCamera32.dll";
+#endif
+
+ return GetModuleHandleA(moduleName) != nullptr;
+ }
+
+ void markBufferBind(BufferType bufferType, HintType hintType, uint64_t threadId)
+ {
+ if (markBufferBindFunc)
+ markBufferBindFunc(bufferType, hintType, threadId);
+ }
+
+ void markBufferFinished(BufferType bufferType, uint64_t threadId)
+ {
+ if (markBufferFinishedFunc)
+ markBufferFinishedFunc(bufferType, threadId);
+ }
+
+ void quaternionToRotationMatrixVectors(const nv::Quat& q, nv::Vec3& right, nv::Vec3& up, nv::Vec3& forward)
+ {
+ float rot[3][3];
+ makeRotationMatrixFromQuaternion(rot, q);
+ right = { rot[0][0], rot[1][0], rot[2][0] };
+ up = { rot[0][1], rot[1][1], rot[2][1] };
+ forward = { rot[0][2], rot[1][2], rot[2][2] };
+ }
+
+ void rotationMatrixVectorsToQuaternion(const nv::Vec3& right, const nv::Vec3& up, const nv::Vec3& forward, nv::Quat& q)
+ {
+ const float rot[3][3] = {
+ { right.x, up.x, forward.x },
+ { right.y, up.y, forward.y },
+ { right.z, up.z, forward.z }
+ };
+ makeQuaternionFromRotationMatrix(q, rot);
+ }
+
+ UserControlStatus addUserControl(const UserControlDesc& desc)
+ {
+ if (addUserControlFunc)
+ return addUserControlFunc(desc);
+ return UserControlStatus::kUserControlInvalidCallback;
+ }
+
+ UserControlStatus setUserControlLabelLocalization(uint32_t userControlId, const char* lang, const char* labelUtf8)
+ {
+ if (setUserControlLabelLocalizationFunc)
+ return setUserControlLabelLocalizationFunc(userControlId, lang, labelUtf8);
+ return UserControlStatus::kUserControlInvalidCallback;
+ }
+
+ UserControlStatus removeUserControl(uint32_t userControlId)
+ {
+ if (removeUserControlFunc)
+ return removeUserControlFunc(userControlId);
+ return UserControlStatus::kUserControlInvalidCallback;
+ }
+
+ UserControlStatus getUserControlValue(uint32_t userControlId, void* value)
+ {
+ if (getUserControlValueFunc)
+ return getUserControlValueFunc(userControlId, value);
+ return UserControlStatus::kUserControlInvalidCallback;
+ }
+}
+
+DelayLoadStatus loadAnselSDKLibrary(const char* pathToLibraryUtf8)
+{
+ if (anselSDK == NULL)
+ {
+ if (pathToLibraryUtf8)
+ {
+ // convert from utf8 to wchar_t:
+ std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
+ std::wstring pathWstring = converter.from_bytes(pathToLibraryUtf8);
+ anselSDK = LoadLibraryW(pathWstring.c_str());
+ }
+ else
+ {
+ #if defined(_M_IX86)
+ #define ANSEL_BITNESS "32"
+ #elif defined(_M_AMD64)
+ #define ANSEL_BITNESS "64"
+ #endif
+
+ #if defined(_DEBUG)
+ #define ANSEL_RUNTIME_FLAVOR "d"
+ #else
+ #define ANSEL_RUNTIME_FLAVOR ""
+ #endif
+
+ const char* libName = "AnselSDK" ANSEL_BITNESS ANSEL_RUNTIME_FLAVOR ".dll";
+ anselSDK = LoadLibraryA(libName);
+ }
+
+ if (anselSDK == NULL)
+ return kDelayLoadDllNotFound;
+ else
+ return ansel::resolveFunctionPointers();
+ }
+
+ return kDelayLoadOk;
+}
diff --git a/samples/AnselSDKDelayLoader/source/DelayLoader.h b/samples/AnselSDKDelayLoader/source/DelayLoader.h index 216261b..656101e 100644 --- a/samples/AnselSDKDelayLoader/source/DelayLoader.h +++ b/samples/AnselSDKDelayLoader/source/DelayLoader.h @@ -1,41 +1,41 @@ -// This code contains NVIDIA Confidential Information and is disclosed to you -// under a form of NVIDIA software license agreement provided separately to you. -// -// Notice -// NVIDIA Corporation and its licensors retain all intellectual property and -// proprietary rights in and to this software and related documentation and -// any modifications thereto. Any use, reproduction, disclosure, or -// distribution of this software and related documentation without an express -// license agreement from NVIDIA Corporation is strictly prohibited. -// -// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES -// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO -// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, -// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. -// -// Information and code furnished is believed to be accurate and reliable. -// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such -// information or for any infringement of patents or other rights of third parties that may -// result from its use. No license is granted by implication or otherwise under any patent -// or patent rights of NVIDIA Corporation. Details are subject to change without notice. -// This code supersedes and replaces all information previously supplied. -// NVIDIA Corporation products are not authorized for use as critical -// components in life support devices or systems without express written approval of -// NVIDIA Corporation. -// -// Copyright 2016 NVIDIA Corporation. All rights reserved. - -#pragma once - -enum DelayLoadStatus -{ - kDelayLoadOk = 0, - kDelayLoadDllNotFound = -1, - kDelayLoadIncompatibleVersion = -2, -}; -// In order to use delay loading instead of regular linking to a dynamic library -// define ANSEL_SDK_DELAYLOAD for the project and use this function to explicitly -// load the library. If you don't specify a path then Win32 LoadLibrary search -// mechanism is applied. If you do specify a path it should be the full path to -// the AnselSDK32/64.dll in utf8 encoding. -DelayLoadStatus loadAnselSDKLibrary(const char* pathToLibraryUtf8 = nullptr); +// This code contains NVIDIA Confidential Information and is disclosed to you
+// under a form of NVIDIA software license agreement provided separately to you.
+//
+// Notice
+// NVIDIA Corporation and its licensors retain all intellectual property and
+// proprietary rights in and to this software and related documentation and
+// any modifications thereto. Any use, reproduction, disclosure, or
+// distribution of this software and related documentation without an express
+// license agreement from NVIDIA Corporation is strictly prohibited.
+//
+// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES
+// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO
+// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT,
+// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
+//
+// Information and code furnished is believed to be accurate and reliable.
+// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such
+// information or for any infringement of patents or other rights of third parties that may
+// result from its use. No license is granted by implication or otherwise under any patent
+// or patent rights of NVIDIA Corporation. Details are subject to change without notice.
+// This code supersedes and replaces all information previously supplied.
+// NVIDIA Corporation products are not authorized for use as critical
+// components in life support devices or systems without express written approval of
+// NVIDIA Corporation.
+//
+// Copyright 2016 NVIDIA Corporation. All rights reserved.
+
+#pragma once
+
+enum DelayLoadStatus
+{
+ kDelayLoadOk = 0,
+ kDelayLoadDllNotFound = -1,
+ kDelayLoadIncompatibleVersion = -2,
+};
+// In order to use delay loading instead of regular linking to a dynamic library
+// define ANSEL_SDK_DELAYLOAD for the project and use this function to explicitly
+// load the library. If you don't specify a path then Win32 LoadLibrary search
+// mechanism is applied. If you do specify a path it should be the full path to
+// the AnselSDK32/64.dll in utf8 encoding.
+DelayLoadStatus loadAnselSDKLibrary(const char* pathToLibraryUtf8 = nullptr);
diff --git a/samples/AnselSDKIntegration/AnselSDKIntegration.cpp b/samples/AnselSDKIntegration/AnselSDKIntegration.cpp index 093b0b8..46876e1 100644 --- a/samples/AnselSDKIntegration/AnselSDKIntegration.cpp +++ b/samples/AnselSDKIntegration/AnselSDKIntegration.cpp @@ -1,730 +1,730 @@ -// This sample uses DirectX SDK, specifically it depends on DirectX 11 -// Please install DirectX SDK June 2010 to compile this sample - -#include <windows.h> -#include <d3d11.h> -#include <d3dcompiler.h> -#include <directxmath.h> -#include <directxcolors.h> - -#include "AnselSDK.h" - -using namespace DirectX; - -struct SimpleVertex -{ - XMFLOAT3 Pos; - XMFLOAT3 Normal; -}; - - -struct ConstantBuffer -{ - XMMATRIX mWorld; - XMMATRIX mView; - XMMATRIX mProjection; - XMFLOAT4 vLightDir; - XMFLOAT4 vLightColor; - XMFLOAT4 vOutputColor; - float vTime; -}; - - -// Globals -HINSTANCE g_hInst = nullptr; -HWND g_hWnd = nullptr; -D3D_DRIVER_TYPE g_driverType = D3D_DRIVER_TYPE_NULL; -D3D_FEATURE_LEVEL g_featureLevel = D3D_FEATURE_LEVEL_11_0; -ID3D11Device* g_pd3dDevice = nullptr; -ID3D11DeviceContext* g_pImmediateContext = nullptr; -IDXGISwapChain* g_pSwapChain = nullptr; -ID3D11RenderTargetView* g_pRenderTargetView = nullptr; -ID3D11Texture2D* g_pDepthStencil = nullptr; -ID3D11DepthStencilView* g_pDepthStencilView = nullptr; -ID3D11VertexShader* g_pVertexShader = nullptr; -ID3D11PixelShader* g_pPixelShader = nullptr; -ID3D11VertexShader* g_pHudVertexShader = nullptr; -ID3D11PixelShader* g_pHudPixelShader = nullptr; -ID3D11InputLayout* g_pVertexLayout = nullptr; -ID3D11DepthStencilState *g_pDepthStencilStateDepthDisable = nullptr; -ID3D11Buffer* g_pVertexBuffer = nullptr; -ID3D11Buffer* g_pIndexBuffer = nullptr; -ID3D11Buffer* g_pHudVertexBuffer = nullptr; -ID3D11Buffer* g_pHudIndexBuffer = nullptr; -ID3D11Buffer* g_pConstantBuffer = nullptr; - -XMMATRIX g_World; -XMMATRIX g_View, g_ViewBackup; -XMMATRIX g_Projection; -bool g_Pause = false; -bool g_AnselSessionIsActive = false; -float g_Fov = XM_PIDIV4; -uint32_t g_FrameWidth = 0u, g_FrameHeight = 0u; -float g_ProjectionOffsetX = 0.0f, g_ProjectionOffsetY = 0.0f; -float g_LightIntensity = 1.0f; - -// Forward declarations -HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow); -HRESULT InitDevice(); -void CleanupDevice(); -LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); -void Render(); - -void updateProjectionMatrix() -{ - // Before Ansel SDK integration: - g_Projection = XMMatrixPerspectiveFovLH(g_Fov, g_FrameWidth / FLOAT(g_FrameHeight), 0.01f, 100.0f); - // Ansel SDK integration requires projection offsetting for super resolution captures: - g_Projection.r[2].m128_f32[0] = -g_ProjectionOffsetX; - g_Projection.r[2].m128_f32[1] = -g_ProjectionOffsetY; -} - -// Entry point -int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow) -{ - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - if (FAILED(InitWindow(hInstance, nCmdShow))) - return 0; - - if (FAILED(InitDevice())) - { - CleanupDevice(); - return 0; - } - - // Main message loop - MSG msg = { 0 }; - while (WM_QUIT != msg.message) - { - if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } - else - Render(); - } - - CleanupDevice(); - - return int(msg.wParam); -} - -// Register class and create window -HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow) -{ - // Register class - WNDCLASSEX wcex; - wcex.cbSize = sizeof(WNDCLASSEX); - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = WndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION); - wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - wcex.lpszMenuName = nullptr; - wcex.lpszClassName = L"SampleWindowClass"; - wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION); - if (!RegisterClassEx(&wcex)) - return E_FAIL; - - // Create window - g_hInst = hInstance; - RECT rc = { 0, 0, 800, 600 }; - AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); - g_hWnd = CreateWindow(L"SampleWindowClass", L"Sample Ansel SDK Integration", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, - CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInstance, nullptr); - if (!g_hWnd) - return E_FAIL; - - ShowWindow(g_hWnd, nCmdShow); - - return S_OK; -} - -HRESULT CompileShaderFromFile(WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut) -{ - HRESULT hr = S_OK; - - ID3DBlob* pErrorBlob = nullptr; - hr = D3DCompileFromFile(szFileName, nullptr, nullptr, szEntryPoint, szShaderModel, - D3DCOMPILE_ENABLE_STRICTNESS, 0, ppBlobOut, &pErrorBlob); - if (FAILED(hr)) - { - if (pErrorBlob) - { - OutputDebugStringA(reinterpret_cast<const char*>(pErrorBlob->GetBufferPointer())); - pErrorBlob->Release(); - } - return hr; - } - if (pErrorBlob) - pErrorBlob->Release(); - - return S_OK; -} - -// Create Direct3D device and swap chain -HRESULT InitDevice() -{ - HRESULT hr = S_OK; - - RECT rc; - GetClientRect(g_hWnd, &rc); - g_FrameWidth = rc.right - rc.left; - g_FrameHeight = rc.bottom - rc.top; - - UINT createDeviceFlags = 0; -#ifdef _DEBUG - createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; -#endif - - D3D_DRIVER_TYPE driverTypes[] = - { - D3D_DRIVER_TYPE_HARDWARE, - D3D_DRIVER_TYPE_WARP, - D3D_DRIVER_TYPE_REFERENCE, - }; - const UINT numDriverTypes = ARRAYSIZE(driverTypes); - - D3D_FEATURE_LEVEL featureLevels[] = - { - D3D_FEATURE_LEVEL_11_1, - D3D_FEATURE_LEVEL_11_0, - }; - const UINT numFeatureLevels = ARRAYSIZE(featureLevels); - - for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++) - { - g_driverType = driverTypes[driverTypeIndex]; - hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels, - D3D11_SDK_VERSION, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext); - - if (hr == E_INVALIDARG) - { - // DirectX 11.0 platforms will not recognize D3D_FEATURE_LEVEL_11_1 so we need to retry without it - hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, &featureLevels[1], numFeatureLevels - 1, - D3D11_SDK_VERSION, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext); - } - - if (SUCCEEDED(hr)) - break; - } - - if (FAILED(hr)) - return hr; - - // Obtain DXGI factory from device (since we used nullptr for pAdapter above) - IDXGIFactory1* dxgiFactory = nullptr; - { - IDXGIDevice* dxgiDevice = nullptr; - hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice)); - if (SUCCEEDED(hr)) - { - IDXGIAdapter* adapter = nullptr; - hr = dxgiDevice->GetAdapter(&adapter); - if (SUCCEEDED(hr)) - { - hr = adapter->GetParent(__uuidof(IDXGIFactory1), reinterpret_cast<void**>(&dxgiFactory)); - adapter->Release(); - } - dxgiDevice->Release(); - } - } - - if (FAILED(hr)) - return hr; - - // Create swap chain - DXGI_SWAP_CHAIN_DESC sd; - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = 1; - sd.BufferDesc.Width = g_FrameWidth; - sd.BufferDesc.Height = g_FrameHeight; - sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = 60; - sd.BufferDesc.RefreshRate.Denominator = 1; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.OutputWindow = g_hWnd; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.Windowed = TRUE; - sd.OutputWindow = g_hWnd; - - hr = dxgiFactory->CreateSwapChain(g_pd3dDevice, &sd, &g_pSwapChain); - - if (FAILED(hr)) - return hr; - - dxgiFactory->Release(); - - // Create a render target view - ID3D11Texture2D* pBackBuffer = nullptr; - hr = g_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&pBackBuffer)); - if (FAILED(hr)) - return hr; - - hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_pRenderTargetView); - pBackBuffer->Release(); - if (FAILED(hr)) - return hr; - - // Create depth stencil texture - D3D11_TEXTURE2D_DESC descDepth; - ZeroMemory(&descDepth, sizeof(descDepth)); - descDepth.Width = g_FrameWidth; - descDepth.Height = g_FrameHeight; - descDepth.MipLevels = 1; - descDepth.ArraySize = 1; - descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; - descDepth.SampleDesc.Count = 1; - descDepth.SampleDesc.Quality = 0; - descDepth.Usage = D3D11_USAGE_DEFAULT; - descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; - descDepth.CPUAccessFlags = 0; - descDepth.MiscFlags = 0; - hr = g_pd3dDevice->CreateTexture2D(&descDepth, nullptr, &g_pDepthStencil); - if (FAILED(hr)) - return hr; - - // Create the depth stencil view - D3D11_DEPTH_STENCIL_VIEW_DESC descDSV; - ZeroMemory(&descDSV, sizeof(descDSV)); - descDSV.Format = descDepth.Format; - descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; - descDSV.Texture2D.MipSlice = 0; - hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencil, &descDSV, &g_pDepthStencilView); - if (FAILED(hr)) - return hr; - - g_pImmediateContext->OMSetRenderTargets(1, &g_pRenderTargetView, g_pDepthStencilView); - - // Setup the viewport - D3D11_VIEWPORT vp; - vp.Width = (FLOAT)g_FrameWidth; - vp.Height = (FLOAT)g_FrameHeight; - vp.MinDepth = 0.0f; - vp.MaxDepth = 1.0f; - vp.TopLeftX = 0; - vp.TopLeftY = 0; - g_pImmediateContext->RSSetViewports(1, &vp); - - // Compile the vertex shader - ID3DBlob* pVSBlob = nullptr; - hr = CompileShaderFromFile(L"Shaders.fx", "VS", "vs_4_0", &pVSBlob); - if (FAILED(hr)) - { - MessageBox(nullptr, - L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK); - return hr; - } - - // Create the vertex shader - hr = g_pd3dDevice->CreateVertexShader(pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), nullptr, &g_pVertexShader); - if (FAILED(hr)) - { - pVSBlob->Release(); - return hr; - } - - hr = CompileShaderFromFile(L"Shaders.fx", "VS_Hud", "vs_4_0", &pVSBlob); - if (FAILED(hr)) - { - MessageBox(nullptr, - L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK); - return hr; - } - - // Create the vertex shader - hr = g_pd3dDevice->CreateVertexShader(pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), nullptr, &g_pHudVertexShader); - if (FAILED(hr)) - { - pVSBlob->Release(); - return hr; - } - - // Define the input layout - D3D11_INPUT_ELEMENT_DESC layout[] = - { - { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }, - }; - const UINT numElements = ARRAYSIZE(layout); - - // Create the input layout - hr = g_pd3dDevice->CreateInputLayout(layout, numElements, pVSBlob->GetBufferPointer(), - pVSBlob->GetBufferSize(), &g_pVertexLayout); - pVSBlob->Release(); - - if (FAILED(hr)) - return hr; - - // Set the input layout - g_pImmediateContext->IASetInputLayout(g_pVertexLayout); - - // Compile the pixel shader - ID3DBlob* pPSBlob = nullptr; - hr = CompileShaderFromFile(L"Shaders.fx", "PS", "ps_4_0", &pPSBlob); - if (FAILED(hr)) - { - MessageBox(nullptr, - L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK); - return hr; - } - - // Create the pixel shader - hr = g_pd3dDevice->CreatePixelShader(pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), nullptr, &g_pPixelShader); - pPSBlob->Release(); - if (FAILED(hr)) - return hr; - - hr = CompileShaderFromFile(L"Shaders.fx", "PS_Hud", "ps_4_0", &pPSBlob); - if (FAILED(hr)) - { - MessageBox(nullptr, - L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK); - return hr; - } - - // Create the pixel shader - hr = g_pd3dDevice->CreatePixelShader(pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), nullptr, &g_pHudPixelShader); - pPSBlob->Release(); - if (FAILED(hr)) - return hr; - - // Create vertex buffer - const SimpleVertex vertices[] = - { - { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) }, - { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) }, - { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) }, - { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) }, - { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) }, - { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) }, - { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) }, - { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) }, - { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) }, - { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) }, - { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) }, - { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) }, - { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) }, - { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) }, - { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) }, - { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) }, - }; - - const SimpleVertex hud[] = - { - { XMFLOAT3(0.1f, -0.92f, 0.0f), XMFLOAT3(0.0f, 0.0f, 0.0f) }, - { XMFLOAT3(0.9f, -0.92f, 0.0f), XMFLOAT3(2.0f, 0.0f, 0.0f) }, - { XMFLOAT3(0.1f, -0.95f, 0.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) }, - { XMFLOAT3(0.9f, -0.95f, 0.0f), XMFLOAT3(3.0f, 0.0f, 0.0f) }, - }; - - D3D11_BUFFER_DESC bd; - ZeroMemory(&bd, sizeof(bd)); - bd.Usage = D3D11_USAGE_DEFAULT; - bd.ByteWidth = sizeof(SimpleVertex) * 24; - bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; - bd.CPUAccessFlags = 0; - D3D11_SUBRESOURCE_DATA InitData; - ZeroMemory(&InitData, sizeof(InitData)); - InitData.pSysMem = vertices; - hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pVertexBuffer); - if (FAILED(hr)) - return hr; - - bd.ByteWidth = sizeof(SimpleVertex) * 4; - InitData.pSysMem = hud; - hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pHudVertexBuffer); - if (FAILED(hr)) - return hr; - - // Set vertex buffer - UINT stride = sizeof(SimpleVertex); - UINT offset = 0; - g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset); - - // Create index buffer - const WORD indices[] = - { - 3,1,0, - 2,1,3, - 6,4,5, - 7,4,6, - 11,9,8, - 10,9,11, - 14,12,13, - 15,12,14, - 19,17,16, - 18,17,19, - 22,20,21, - 23,20,22 - }; - - const WORD hud_indices[] = { 0,1,2,2,1,3 }; - - bd.Usage = D3D11_USAGE_DEFAULT; - bd.ByteWidth = sizeof(WORD) * 36; - bd.BindFlags = D3D11_BIND_INDEX_BUFFER; - bd.CPUAccessFlags = 0; - InitData.pSysMem = indices; - hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pIndexBuffer); - if (FAILED(hr)) - return hr; - - bd.ByteWidth = sizeof(WORD) * 6; - InitData.pSysMem = hud_indices; - hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pHudIndexBuffer); - if (FAILED(hr)) - return hr; - - // Set index buffer - g_pImmediateContext->IASetIndexBuffer(g_pIndexBuffer, DXGI_FORMAT_R16_UINT, 0); - - // Set primitive topology - g_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - - // Create the constant buffer - bd.Usage = D3D11_USAGE_DEFAULT; - bd.ByteWidth = sizeof(ConstantBuffer); - bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; - bd.CPUAccessFlags = 0; - hr = g_pd3dDevice->CreateBuffer(&bd, nullptr, &g_pConstantBuffer); - if (FAILED(hr)) - return hr; - - D3D11_DEPTH_STENCIL_DESC depthStencilDesc; - depthStencilDesc.DepthEnable = FALSE; - depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL; - depthStencilDesc.DepthFunc = D3D11_COMPARISON_ALWAYS; - depthStencilDesc.StencilEnable = FALSE; - depthStencilDesc.StencilReadMask = 0xFF; - depthStencilDesc.StencilWriteMask = 0xFF; - - hr = g_pd3dDevice->CreateDepthStencilState(&depthStencilDesc, &g_pDepthStencilStateDepthDisable); - if (FAILED(hr)) - return hr; - - // Initialize the world matrices - g_World = XMMatrixIdentity(); - - // Initialize the view matrix - g_View = XMMatrixLookAtLH(XMVectorSet(0.0f, 4.0f, -10.0f, 0.0f), - XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f), - XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f)); - - // Initialize the projection matrix - updateProjectionMatrix(); - - // Configure the Ansel SDK - ansel::Configuration config; - config.rotationalSpeedInDegreesPerSecond = 220.0f; - config.translationalSpeedInWorldUnitsPerSecond = 50.0f; - config.right = { 1.0f, 0.0f, 0.0f }; - config.up = { 0.0f, 1.0f, 0.0f }; - config.forward = { 0.0f, 0.0f, 1.0f }; - config.captureLatency = 0; - config.captureSettleLatency = 0; - config.metersInWorldUnit = 2.0f; - config.fovType = ansel::kVerticalFov; - config.startSessionCallback = [](ansel::SessionConfiguration& conf, void* userPointer) - { - UNREFERENCED_PARAMETER(userPointer); - UNREFERENCED_PARAMETER(conf); - g_Pause = true; - g_AnselSessionIsActive = true; - g_ViewBackup = g_View; - return ansel::kAllowed; - }; - config.stopSessionCallback = [](void* userPointer) - { - UNREFERENCED_PARAMETER(userPointer); - g_Pause = false; - g_AnselSessionIsActive = false; - g_View = g_ViewBackup; - }; - config.startCaptureCallback = [](const ansel::CaptureConfiguration&, void*) - { - // turn non-uniform full screen effects like vignette off here - }; - config.stopCaptureCallback = [](void*) - { - // turn disabled effects back on here - }; - config.isCameraFovSupported = true; - config.isCameraOffcenteredProjectionSupported = true; - config.isCameraRotationSupported = true; - config.isCameraTranslationSupported = true; - config.userPointer = nullptr; - config.gameWindowHandle = g_hWnd; - config.titleNameUtf8 = "AnselSDKIntegration"; - ansel::setConfiguration(config); - - // Expose light intensity setting as user control in the Ansel UI - { - ansel::UserControlDesc ui_position_slider; - ui_position_slider.labelUtf8 = "Light intensity"; - ui_position_slider.info.userControlId = 1; - ui_position_slider.info.userControlType = ansel::kUserControlSlider; - ui_position_slider.info.value = &g_LightIntensity; - ui_position_slider.callback = [](const ansel::UserControlInfo& info) { - g_LightIntensity = *reinterpret_cast<const float*>(info.value); - }; - ansel::addUserControl(ui_position_slider); - } - - return S_OK; -} - -// Clean up the objects we've created -void CleanupDevice() -{ - if (g_pImmediateContext) g_pImmediateContext->ClearState(); - if (g_pConstantBuffer) g_pConstantBuffer->Release(); - if (g_pVertexBuffer) g_pVertexBuffer->Release(); - if (g_pIndexBuffer) g_pIndexBuffer->Release(); - if (g_pHudVertexBuffer) g_pVertexBuffer->Release(); - if (g_pHudIndexBuffer) g_pIndexBuffer->Release(); - if (g_pVertexLayout) g_pVertexLayout->Release(); - if (g_pVertexShader) g_pVertexShader->Release(); - if (g_pPixelShader) g_pPixelShader->Release(); - if (g_pHudVertexShader) g_pVertexShader->Release(); - if (g_pHudPixelShader) g_pPixelShader->Release(); - if (g_pDepthStencil) g_pDepthStencil->Release(); - if (g_pDepthStencilView) g_pDepthStencilView->Release(); - if (g_pRenderTargetView) g_pRenderTargetView->Release(); - if (g_pDepthStencilStateDepthDisable) g_pDepthStencilStateDepthDisable->Release(); - if (g_pSwapChain) g_pSwapChain->Release(); - if (g_pImmediateContext) g_pImmediateContext->Release(); - if (g_pd3dDevice) g_pd3dDevice->Release(); -} - -// Called every time the application receives a message -LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - PAINTSTRUCT ps; - HDC hdc; - - switch (message) - { - case WM_PAINT: - hdc = BeginPaint(hWnd, &ps); - EndPaint(hWnd, &ps); - break; - - case WM_DESTROY: - PostQuitMessage(0); - break; - - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - return 0; -} - -// Render a frame -void Render() -{ - // Simple solution, but not the best one: we would like to run at 100 hz - Sleep(10); - // Update our time - static float t = 0.0f; - if (!g_Pause) - { - static ULONGLONG timeStart = 0; - ULONGLONG timeCur = GetTickCount64(); - if (timeStart == 0) - timeStart = timeCur; - t = (timeCur - timeStart) / 1000.0f; - } - - // Before Ansel SDK integration: - // Rotate cube around the origin - // g_World = XMMatrixRotationY(t); - - // After Ansel SDK integration: - if (g_AnselSessionIsActive) - { - ansel::Camera cam; - // set up ansel::Camera object with the current camera parameters - cam.fov = (g_Fov / XM_PI) * 180.0f; - cam.projectionOffsetX = g_ProjectionOffsetX; - cam.projectionOffsetY = g_ProjectionOffsetY; - // convert view matrix (XMMATRIX) into a pair of a position and a quaternion - XMMATRIX invView = XMMatrixInverse(nullptr, g_View); - const nv::Vec3 right = { invView.r[0].m128_f32[0], invView.r[0].m128_f32[1], invView.r[0].m128_f32[2] }; - const nv::Vec3 up = { invView.r[1].m128_f32[0], invView.r[1].m128_f32[1], invView.r[1].m128_f32[2] }; - const nv::Vec3 forward = { invView.r[2].m128_f32[0], invView.r[2].m128_f32[1], invView.r[2].m128_f32[2] }; - ansel::rotationMatrixVectorsToQuaternion(right, up, forward, cam.rotation); - cam.position = { invView.r[3].m128_f32[0], invView.r[3].m128_f32[1], invView.r[3].m128_f32[2] }; - ansel::updateCamera(cam); - // convert position and quaternion returned in ansel::updateCamera call and update camera parameters - invView = DirectX::XMMatrixAffineTransformation(DirectX::XMVectorSet(1.0f, 1.0f, 1.0f, 1.0f), - DirectX::XMVectorSet(0.0f, 0.0f, 0.0f, 1.0f), - DirectX::XMLoadFloat4(reinterpret_cast<const XMFLOAT4*>(&cam.rotation)), - DirectX::XMLoadFloat3(reinterpret_cast<const XMFLOAT3*>(&cam.position))); - g_View = XMMatrixInverse(nullptr, invView); - g_Fov = (cam.fov / 180.0f) * XM_PI; - g_ProjectionOffsetX = cam.projectionOffsetX; - g_ProjectionOffsetY = cam.projectionOffsetY; - updateProjectionMatrix(); - } - else - g_World = XMMatrixRotationY(t); // Rotate cube around the origin - - // Clear the back buffer - g_pImmediateContext->ClearRenderTargetView(g_pRenderTargetView, Colors::MidnightBlue); - - // Clear the depth buffer to 1.0 (max depth) - g_pImmediateContext->ClearDepthStencilView(g_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0); - - // Update matrix variables and lighting variables - ConstantBuffer cb1; - cb1.mWorld = XMMatrixTranspose(g_World); - cb1.mView = XMMatrixTranspose(g_View); - cb1.mProjection = XMMatrixTranspose(g_Projection); - cb1.vLightDir = XMFLOAT4(-0.577f, 0.577f, -0.577f, 1.0f); - cb1.vLightColor = XMFLOAT4(0.453f * g_LightIntensity, 0.714f * g_LightIntensity, 0.105f * g_LightIntensity, 1.0f); - cb1.vOutputColor = XMFLOAT4(0, 0, 0, 0); - cb1.vTime = t; - g_pImmediateContext->UpdateSubresource(g_pConstantBuffer, 0, nullptr, &cb1, 0, 0); - - // Render the cube - UINT stride = sizeof(SimpleVertex); - UINT offset = 0; - - g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset); - g_pImmediateContext->IASetIndexBuffer(g_pIndexBuffer, DXGI_FORMAT_R16_UINT, 0); - g_pImmediateContext->VSSetShader(g_pVertexShader, nullptr, 0); - g_pImmediateContext->VSSetConstantBuffers(0, 1, &g_pConstantBuffer); - g_pImmediateContext->PSSetShader(g_pPixelShader, nullptr, 0); - g_pImmediateContext->PSSetConstantBuffers(0, 1, &g_pConstantBuffer); - g_pImmediateContext->DrawIndexed(36, 0, 0); - - // Render the HUD only if Ansel session is not active - if (!g_AnselSessionIsActive) - { - g_pImmediateContext->OMSetDepthStencilState(g_pDepthStencilStateDepthDisable, 0); - g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pHudVertexBuffer, &stride, &offset); - g_pImmediateContext->IASetIndexBuffer(g_pHudIndexBuffer, DXGI_FORMAT_R16_UINT, 0); - g_pImmediateContext->VSSetShader(g_pHudVertexShader, nullptr, 0); - g_pImmediateContext->PSSetShader(g_pHudPixelShader, nullptr, 0); - g_pImmediateContext->DrawIndexed(6, 0, 0); - } - - // Present our back buffer to our front buffer - g_pSwapChain->Present(0, 0); -} +// This sample uses DirectX SDK, specifically it depends on DirectX 11
+// Please install DirectX SDK June 2010 to compile this sample
+
+#include <windows.h>
+#include <d3d11.h>
+#include <d3dcompiler.h>
+#include <directxmath.h>
+#include <directxcolors.h>
+
+#include "AnselSDK.h"
+
+using namespace DirectX;
+
+struct SimpleVertex
+{
+ XMFLOAT3 Pos;
+ XMFLOAT3 Normal;
+};
+
+
+struct ConstantBuffer
+{
+ XMMATRIX mWorld;
+ XMMATRIX mView;
+ XMMATRIX mProjection;
+ XMFLOAT4 vLightDir;
+ XMFLOAT4 vLightColor;
+ XMFLOAT4 vOutputColor;
+ float vTime;
+};
+
+
+// Globals
+HINSTANCE g_hInst = nullptr;
+HWND g_hWnd = nullptr;
+D3D_DRIVER_TYPE g_driverType = D3D_DRIVER_TYPE_NULL;
+D3D_FEATURE_LEVEL g_featureLevel = D3D_FEATURE_LEVEL_11_0;
+ID3D11Device* g_pd3dDevice = nullptr;
+ID3D11DeviceContext* g_pImmediateContext = nullptr;
+IDXGISwapChain* g_pSwapChain = nullptr;
+ID3D11RenderTargetView* g_pRenderTargetView = nullptr;
+ID3D11Texture2D* g_pDepthStencil = nullptr;
+ID3D11DepthStencilView* g_pDepthStencilView = nullptr;
+ID3D11VertexShader* g_pVertexShader = nullptr;
+ID3D11PixelShader* g_pPixelShader = nullptr;
+ID3D11VertexShader* g_pHudVertexShader = nullptr;
+ID3D11PixelShader* g_pHudPixelShader = nullptr;
+ID3D11InputLayout* g_pVertexLayout = nullptr;
+ID3D11DepthStencilState *g_pDepthStencilStateDepthDisable = nullptr;
+ID3D11Buffer* g_pVertexBuffer = nullptr;
+ID3D11Buffer* g_pIndexBuffer = nullptr;
+ID3D11Buffer* g_pHudVertexBuffer = nullptr;
+ID3D11Buffer* g_pHudIndexBuffer = nullptr;
+ID3D11Buffer* g_pConstantBuffer = nullptr;
+
+XMMATRIX g_World;
+XMMATRIX g_View, g_ViewBackup;
+XMMATRIX g_Projection;
+bool g_Pause = false;
+bool g_AnselSessionIsActive = false;
+float g_Fov = XM_PIDIV4;
+uint32_t g_FrameWidth = 0u, g_FrameHeight = 0u;
+float g_ProjectionOffsetX = 0.0f, g_ProjectionOffsetY = 0.0f;
+float g_LightIntensity = 1.0f;
+
+// Forward declarations
+HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow);
+HRESULT InitDevice();
+void CleanupDevice();
+LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
+void Render();
+
+void updateProjectionMatrix()
+{
+ // Before Ansel SDK integration:
+ g_Projection = XMMatrixPerspectiveFovLH(g_Fov, g_FrameWidth / FLOAT(g_FrameHeight), 0.01f, 100.0f);
+ // Ansel SDK integration requires projection offsetting for super resolution captures:
+ g_Projection.r[2].m128_f32[0] = -g_ProjectionOffsetX;
+ g_Projection.r[2].m128_f32[1] = -g_ProjectionOffsetY;
+}
+
+// Entry point
+int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
+{
+ UNREFERENCED_PARAMETER(hPrevInstance);
+ UNREFERENCED_PARAMETER(lpCmdLine);
+
+ if (FAILED(InitWindow(hInstance, nCmdShow)))
+ return 0;
+
+ if (FAILED(InitDevice()))
+ {
+ CleanupDevice();
+ return 0;
+ }
+
+ // Main message loop
+ MSG msg = { 0 };
+ while (WM_QUIT != msg.message)
+ {
+ if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
+ {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+ else
+ Render();
+ }
+
+ CleanupDevice();
+
+ return int(msg.wParam);
+}
+
+// Register class and create window
+HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow)
+{
+ // Register class
+ WNDCLASSEX wcex;
+ wcex.cbSize = sizeof(WNDCLASSEX);
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = WndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_APPLICATION);
+ wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
+ wcex.lpszMenuName = nullptr;
+ wcex.lpszClassName = L"SampleWindowClass";
+ wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_APPLICATION);
+ if (!RegisterClassEx(&wcex))
+ return E_FAIL;
+
+ // Create window
+ g_hInst = hInstance;
+ RECT rc = { 0, 0, 800, 600 };
+ AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
+ g_hWnd = CreateWindow(L"SampleWindowClass", L"Sample Ansel SDK Integration", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
+ CW_USEDEFAULT, CW_USEDEFAULT, rc.right - rc.left, rc.bottom - rc.top, nullptr, nullptr, hInstance, nullptr);
+ if (!g_hWnd)
+ return E_FAIL;
+
+ ShowWindow(g_hWnd, nCmdShow);
+
+ return S_OK;
+}
+
+HRESULT CompileShaderFromFile(WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut)
+{
+ HRESULT hr = S_OK;
+
+ ID3DBlob* pErrorBlob = nullptr;
+ hr = D3DCompileFromFile(szFileName, nullptr, nullptr, szEntryPoint, szShaderModel,
+ D3DCOMPILE_ENABLE_STRICTNESS, 0, ppBlobOut, &pErrorBlob);
+ if (FAILED(hr))
+ {
+ if (pErrorBlob)
+ {
+ OutputDebugStringA(reinterpret_cast<const char*>(pErrorBlob->GetBufferPointer()));
+ pErrorBlob->Release();
+ }
+ return hr;
+ }
+ if (pErrorBlob)
+ pErrorBlob->Release();
+
+ return S_OK;
+}
+
+// Create Direct3D device and swap chain
+HRESULT InitDevice()
+{
+ HRESULT hr = S_OK;
+
+ RECT rc;
+ GetClientRect(g_hWnd, &rc);
+ g_FrameWidth = rc.right - rc.left;
+ g_FrameHeight = rc.bottom - rc.top;
+
+ UINT createDeviceFlags = 0;
+#ifdef _DEBUG
+ createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
+#endif
+
+ D3D_DRIVER_TYPE driverTypes[] =
+ {
+ D3D_DRIVER_TYPE_HARDWARE,
+ D3D_DRIVER_TYPE_WARP,
+ D3D_DRIVER_TYPE_REFERENCE,
+ };
+ const UINT numDriverTypes = ARRAYSIZE(driverTypes);
+
+ D3D_FEATURE_LEVEL featureLevels[] =
+ {
+ D3D_FEATURE_LEVEL_11_1,
+ D3D_FEATURE_LEVEL_11_0,
+ };
+ const UINT numFeatureLevels = ARRAYSIZE(featureLevels);
+
+ for (UINT driverTypeIndex = 0; driverTypeIndex < numDriverTypes; driverTypeIndex++)
+ {
+ g_driverType = driverTypes[driverTypeIndex];
+ hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, featureLevels, numFeatureLevels,
+ D3D11_SDK_VERSION, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext);
+
+ if (hr == E_INVALIDARG)
+ {
+ // DirectX 11.0 platforms will not recognize D3D_FEATURE_LEVEL_11_1 so we need to retry without it
+ hr = D3D11CreateDevice(nullptr, g_driverType, nullptr, createDeviceFlags, &featureLevels[1], numFeatureLevels - 1,
+ D3D11_SDK_VERSION, &g_pd3dDevice, &g_featureLevel, &g_pImmediateContext);
+ }
+
+ if (SUCCEEDED(hr))
+ break;
+ }
+
+ if (FAILED(hr))
+ return hr;
+
+ // Obtain DXGI factory from device (since we used nullptr for pAdapter above)
+ IDXGIFactory1* dxgiFactory = nullptr;
+ {
+ IDXGIDevice* dxgiDevice = nullptr;
+ hr = g_pd3dDevice->QueryInterface(__uuidof(IDXGIDevice), reinterpret_cast<void**>(&dxgiDevice));
+ if (SUCCEEDED(hr))
+ {
+ IDXGIAdapter* adapter = nullptr;
+ hr = dxgiDevice->GetAdapter(&adapter);
+ if (SUCCEEDED(hr))
+ {
+ hr = adapter->GetParent(__uuidof(IDXGIFactory1), reinterpret_cast<void**>(&dxgiFactory));
+ adapter->Release();
+ }
+ dxgiDevice->Release();
+ }
+ }
+
+ if (FAILED(hr))
+ return hr;
+
+ // Create swap chain
+ DXGI_SWAP_CHAIN_DESC sd;
+ ZeroMemory(&sd, sizeof(sd));
+ sd.BufferCount = 1;
+ sd.BufferDesc.Width = g_FrameWidth;
+ sd.BufferDesc.Height = g_FrameHeight;
+ sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ sd.BufferDesc.RefreshRate.Numerator = 60;
+ sd.BufferDesc.RefreshRate.Denominator = 1;
+ sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
+ sd.OutputWindow = g_hWnd;
+ sd.SampleDesc.Count = 1;
+ sd.SampleDesc.Quality = 0;
+ sd.Windowed = TRUE;
+ sd.OutputWindow = g_hWnd;
+
+ hr = dxgiFactory->CreateSwapChain(g_pd3dDevice, &sd, &g_pSwapChain);
+
+ if (FAILED(hr))
+ return hr;
+
+ dxgiFactory->Release();
+
+ // Create a render target view
+ ID3D11Texture2D* pBackBuffer = nullptr;
+ hr = g_pSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), reinterpret_cast<void**>(&pBackBuffer));
+ if (FAILED(hr))
+ return hr;
+
+ hr = g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_pRenderTargetView);
+ pBackBuffer->Release();
+ if (FAILED(hr))
+ return hr;
+
+ // Create depth stencil texture
+ D3D11_TEXTURE2D_DESC descDepth;
+ ZeroMemory(&descDepth, sizeof(descDepth));
+ descDepth.Width = g_FrameWidth;
+ descDepth.Height = g_FrameHeight;
+ descDepth.MipLevels = 1;
+ descDepth.ArraySize = 1;
+ descDepth.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
+ descDepth.SampleDesc.Count = 1;
+ descDepth.SampleDesc.Quality = 0;
+ descDepth.Usage = D3D11_USAGE_DEFAULT;
+ descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL;
+ descDepth.CPUAccessFlags = 0;
+ descDepth.MiscFlags = 0;
+ hr = g_pd3dDevice->CreateTexture2D(&descDepth, nullptr, &g_pDepthStencil);
+ if (FAILED(hr))
+ return hr;
+
+ // Create the depth stencil view
+ D3D11_DEPTH_STENCIL_VIEW_DESC descDSV;
+ ZeroMemory(&descDSV, sizeof(descDSV));
+ descDSV.Format = descDepth.Format;
+ descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
+ descDSV.Texture2D.MipSlice = 0;
+ hr = g_pd3dDevice->CreateDepthStencilView(g_pDepthStencil, &descDSV, &g_pDepthStencilView);
+ if (FAILED(hr))
+ return hr;
+
+ g_pImmediateContext->OMSetRenderTargets(1, &g_pRenderTargetView, g_pDepthStencilView);
+
+ // Setup the viewport
+ D3D11_VIEWPORT vp;
+ vp.Width = (FLOAT)g_FrameWidth;
+ vp.Height = (FLOAT)g_FrameHeight;
+ vp.MinDepth = 0.0f;
+ vp.MaxDepth = 1.0f;
+ vp.TopLeftX = 0;
+ vp.TopLeftY = 0;
+ g_pImmediateContext->RSSetViewports(1, &vp);
+
+ // Compile the vertex shader
+ ID3DBlob* pVSBlob = nullptr;
+ hr = CompileShaderFromFile(L"Shaders.fx", "VS", "vs_4_0", &pVSBlob);
+ if (FAILED(hr))
+ {
+ MessageBox(nullptr,
+ L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK);
+ return hr;
+ }
+
+ // Create the vertex shader
+ hr = g_pd3dDevice->CreateVertexShader(pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), nullptr, &g_pVertexShader);
+ if (FAILED(hr))
+ {
+ pVSBlob->Release();
+ return hr;
+ }
+
+ hr = CompileShaderFromFile(L"Shaders.fx", "VS_Hud", "vs_4_0", &pVSBlob);
+ if (FAILED(hr))
+ {
+ MessageBox(nullptr,
+ L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK);
+ return hr;
+ }
+
+ // Create the vertex shader
+ hr = g_pd3dDevice->CreateVertexShader(pVSBlob->GetBufferPointer(), pVSBlob->GetBufferSize(), nullptr, &g_pHudVertexShader);
+ if (FAILED(hr))
+ {
+ pVSBlob->Release();
+ return hr;
+ }
+
+ // Define the input layout
+ D3D11_INPUT_ELEMENT_DESC layout[] =
+ {
+ { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ };
+ const UINT numElements = ARRAYSIZE(layout);
+
+ // Create the input layout
+ hr = g_pd3dDevice->CreateInputLayout(layout, numElements, pVSBlob->GetBufferPointer(),
+ pVSBlob->GetBufferSize(), &g_pVertexLayout);
+ pVSBlob->Release();
+
+ if (FAILED(hr))
+ return hr;
+
+ // Set the input layout
+ g_pImmediateContext->IASetInputLayout(g_pVertexLayout);
+
+ // Compile the pixel shader
+ ID3DBlob* pPSBlob = nullptr;
+ hr = CompileShaderFromFile(L"Shaders.fx", "PS", "ps_4_0", &pPSBlob);
+ if (FAILED(hr))
+ {
+ MessageBox(nullptr,
+ L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK);
+ return hr;
+ }
+
+ // Create the pixel shader
+ hr = g_pd3dDevice->CreatePixelShader(pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), nullptr, &g_pPixelShader);
+ pPSBlob->Release();
+ if (FAILED(hr))
+ return hr;
+
+ hr = CompileShaderFromFile(L"Shaders.fx", "PS_Hud", "ps_4_0", &pPSBlob);
+ if (FAILED(hr))
+ {
+ MessageBox(nullptr,
+ L"The FX file cannot be compiled. Please run this executable from the directory that contains the FX file.", L"Error", MB_OK);
+ return hr;
+ }
+
+ // Create the pixel shader
+ hr = g_pd3dDevice->CreatePixelShader(pPSBlob->GetBufferPointer(), pPSBlob->GetBufferSize(), nullptr, &g_pHudPixelShader);
+ pPSBlob->Release();
+ if (FAILED(hr))
+ return hr;
+
+ // Create vertex buffer
+ const SimpleVertex vertices[] =
+ {
+ { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) },
+ { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) },
+ { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 1.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) },
+ { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) },
+ { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, -1.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(-1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) },
+ { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) },
+ { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) },
+ { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f) },
+ { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) },
+ { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) },
+ { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) },
+ { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, 1.0f) },
+ };
+
+ const SimpleVertex hud[] =
+ {
+ { XMFLOAT3(0.1f, -0.92f, 0.0f), XMFLOAT3(0.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(0.9f, -0.92f, 0.0f), XMFLOAT3(2.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(0.1f, -0.95f, 0.0f), XMFLOAT3(1.0f, 0.0f, 0.0f) },
+ { XMFLOAT3(0.9f, -0.95f, 0.0f), XMFLOAT3(3.0f, 0.0f, 0.0f) },
+ };
+
+ D3D11_BUFFER_DESC bd;
+ ZeroMemory(&bd, sizeof(bd));
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof(SimpleVertex) * 24;
+ bd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ bd.CPUAccessFlags = 0;
+ D3D11_SUBRESOURCE_DATA InitData;
+ ZeroMemory(&InitData, sizeof(InitData));
+ InitData.pSysMem = vertices;
+ hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pVertexBuffer);
+ if (FAILED(hr))
+ return hr;
+
+ bd.ByteWidth = sizeof(SimpleVertex) * 4;
+ InitData.pSysMem = hud;
+ hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pHudVertexBuffer);
+ if (FAILED(hr))
+ return hr;
+
+ // Set vertex buffer
+ UINT stride = sizeof(SimpleVertex);
+ UINT offset = 0;
+ g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset);
+
+ // Create index buffer
+ const WORD indices[] =
+ {
+ 3,1,0,
+ 2,1,3,
+ 6,4,5,
+ 7,4,6,
+ 11,9,8,
+ 10,9,11,
+ 14,12,13,
+ 15,12,14,
+ 19,17,16,
+ 18,17,19,
+ 22,20,21,
+ 23,20,22
+ };
+
+ const WORD hud_indices[] = { 0,1,2,2,1,3 };
+
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof(WORD) * 36;
+ bd.BindFlags = D3D11_BIND_INDEX_BUFFER;
+ bd.CPUAccessFlags = 0;
+ InitData.pSysMem = indices;
+ hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pIndexBuffer);
+ if (FAILED(hr))
+ return hr;
+
+ bd.ByteWidth = sizeof(WORD) * 6;
+ InitData.pSysMem = hud_indices;
+ hr = g_pd3dDevice->CreateBuffer(&bd, &InitData, &g_pHudIndexBuffer);
+ if (FAILED(hr))
+ return hr;
+
+ // Set index buffer
+ g_pImmediateContext->IASetIndexBuffer(g_pIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
+
+ // Set primitive topology
+ g_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
+
+ // Create the constant buffer
+ bd.Usage = D3D11_USAGE_DEFAULT;
+ bd.ByteWidth = sizeof(ConstantBuffer);
+ bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+ bd.CPUAccessFlags = 0;
+ hr = g_pd3dDevice->CreateBuffer(&bd, nullptr, &g_pConstantBuffer);
+ if (FAILED(hr))
+ return hr;
+
+ D3D11_DEPTH_STENCIL_DESC depthStencilDesc;
+ depthStencilDesc.DepthEnable = FALSE;
+ depthStencilDesc.DepthWriteMask = D3D11_DEPTH_WRITE_MASK_ALL;
+ depthStencilDesc.DepthFunc = D3D11_COMPARISON_ALWAYS;
+ depthStencilDesc.StencilEnable = FALSE;
+ depthStencilDesc.StencilReadMask = 0xFF;
+ depthStencilDesc.StencilWriteMask = 0xFF;
+
+ hr = g_pd3dDevice->CreateDepthStencilState(&depthStencilDesc, &g_pDepthStencilStateDepthDisable);
+ if (FAILED(hr))
+ return hr;
+
+ // Initialize the world matrices
+ g_World = XMMatrixIdentity();
+
+ // Initialize the view matrix
+ g_View = XMMatrixLookAtLH(XMVectorSet(0.0f, 4.0f, -10.0f, 0.0f),
+ XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f),
+ XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f));
+
+ // Initialize the projection matrix
+ updateProjectionMatrix();
+
+ // Configure the Ansel SDK
+ ansel::Configuration config;
+ config.rotationalSpeedInDegreesPerSecond = 220.0f;
+ config.translationalSpeedInWorldUnitsPerSecond = 50.0f;
+ config.right = { 1.0f, 0.0f, 0.0f };
+ config.up = { 0.0f, 1.0f, 0.0f };
+ config.forward = { 0.0f, 0.0f, 1.0f };
+ config.captureLatency = 0;
+ config.captureSettleLatency = 0;
+ config.metersInWorldUnit = 2.0f;
+ config.fovType = ansel::kVerticalFov;
+ config.startSessionCallback = [](ansel::SessionConfiguration& conf, void* userPointer)
+ {
+ UNREFERENCED_PARAMETER(userPointer);
+ UNREFERENCED_PARAMETER(conf);
+ g_Pause = true;
+ g_AnselSessionIsActive = true;
+ g_ViewBackup = g_View;
+ return ansel::kAllowed;
+ };
+ config.stopSessionCallback = [](void* userPointer)
+ {
+ UNREFERENCED_PARAMETER(userPointer);
+ g_Pause = false;
+ g_AnselSessionIsActive = false;
+ g_View = g_ViewBackup;
+ };
+ config.startCaptureCallback = [](const ansel::CaptureConfiguration&, void*)
+ {
+ // turn non-uniform full screen effects like vignette off here
+ };
+ config.stopCaptureCallback = [](void*)
+ {
+ // turn disabled effects back on here
+ };
+ config.isCameraFovSupported = true;
+ config.isCameraOffcenteredProjectionSupported = true;
+ config.isCameraRotationSupported = true;
+ config.isCameraTranslationSupported = true;
+ config.userPointer = nullptr;
+ config.gameWindowHandle = g_hWnd;
+ config.titleNameUtf8 = "AnselSDKIntegration";
+ ansel::setConfiguration(config);
+
+ // Expose light intensity setting as user control in the Ansel UI
+ {
+ ansel::UserControlDesc ui_position_slider;
+ ui_position_slider.labelUtf8 = "Light intensity";
+ ui_position_slider.info.userControlId = 1;
+ ui_position_slider.info.userControlType = ansel::kUserControlSlider;
+ ui_position_slider.info.value = &g_LightIntensity;
+ ui_position_slider.callback = [](const ansel::UserControlInfo& info) {
+ g_LightIntensity = *reinterpret_cast<const float*>(info.value);
+ };
+ ansel::addUserControl(ui_position_slider);
+ }
+
+ return S_OK;
+}
+
+// Clean up the objects we've created
+void CleanupDevice()
+{
+ if (g_pImmediateContext) g_pImmediateContext->ClearState();
+ if (g_pConstantBuffer) g_pConstantBuffer->Release();
+ if (g_pVertexBuffer) g_pVertexBuffer->Release();
+ if (g_pIndexBuffer) g_pIndexBuffer->Release();
+ if (g_pHudVertexBuffer) g_pVertexBuffer->Release();
+ if (g_pHudIndexBuffer) g_pIndexBuffer->Release();
+ if (g_pVertexLayout) g_pVertexLayout->Release();
+ if (g_pVertexShader) g_pVertexShader->Release();
+ if (g_pPixelShader) g_pPixelShader->Release();
+ if (g_pHudVertexShader) g_pVertexShader->Release();
+ if (g_pHudPixelShader) g_pPixelShader->Release();
+ if (g_pDepthStencil) g_pDepthStencil->Release();
+ if (g_pDepthStencilView) g_pDepthStencilView->Release();
+ if (g_pRenderTargetView) g_pRenderTargetView->Release();
+ if (g_pDepthStencilStateDepthDisable) g_pDepthStencilStateDepthDisable->Release();
+ if (g_pSwapChain) g_pSwapChain->Release();
+ if (g_pImmediateContext) g_pImmediateContext->Release();
+ if (g_pd3dDevice) g_pd3dDevice->Release();
+}
+
+// Called every time the application receives a message
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ PAINTSTRUCT ps;
+ HDC hdc;
+
+ switch (message)
+ {
+ case WM_PAINT:
+ hdc = BeginPaint(hWnd, &ps);
+ EndPaint(hWnd, &ps);
+ break;
+
+ case WM_DESTROY:
+ PostQuitMessage(0);
+ break;
+
+ default:
+ return DefWindowProc(hWnd, message, wParam, lParam);
+ }
+ return 0;
+}
+
+// Render a frame
+void Render()
+{
+ // Simple solution, but not the best one: we would like to run at 100 hz
+ Sleep(10);
+ // Update our time
+ static float t = 0.0f;
+ if (!g_Pause)
+ {
+ static ULONGLONG timeStart = 0;
+ ULONGLONG timeCur = GetTickCount64();
+ if (timeStart == 0)
+ timeStart = timeCur;
+ t = (timeCur - timeStart) / 1000.0f;
+ }
+
+ // Before Ansel SDK integration:
+ // Rotate cube around the origin
+ // g_World = XMMatrixRotationY(t);
+
+ // After Ansel SDK integration:
+ if (g_AnselSessionIsActive)
+ {
+ ansel::Camera cam;
+ // set up ansel::Camera object with the current camera parameters
+ cam.fov = (g_Fov / XM_PI) * 180.0f;
+ cam.projectionOffsetX = g_ProjectionOffsetX;
+ cam.projectionOffsetY = g_ProjectionOffsetY;
+ // convert view matrix (XMMATRIX) into a pair of a position and a quaternion
+ XMMATRIX invView = XMMatrixInverse(nullptr, g_View);
+ const nv::Vec3 right = { invView.r[0].m128_f32[0], invView.r[0].m128_f32[1], invView.r[0].m128_f32[2] };
+ const nv::Vec3 up = { invView.r[1].m128_f32[0], invView.r[1].m128_f32[1], invView.r[1].m128_f32[2] };
+ const nv::Vec3 forward = { invView.r[2].m128_f32[0], invView.r[2].m128_f32[1], invView.r[2].m128_f32[2] };
+ ansel::rotationMatrixVectorsToQuaternion(right, up, forward, cam.rotation);
+ cam.position = { invView.r[3].m128_f32[0], invView.r[3].m128_f32[1], invView.r[3].m128_f32[2] };
+ ansel::updateCamera(cam);
+ // convert position and quaternion returned in ansel::updateCamera call and update camera parameters
+ invView = DirectX::XMMatrixAffineTransformation(DirectX::XMVectorSet(1.0f, 1.0f, 1.0f, 1.0f),
+ DirectX::XMVectorSet(0.0f, 0.0f, 0.0f, 1.0f),
+ DirectX::XMLoadFloat4(reinterpret_cast<const XMFLOAT4*>(&cam.rotation)),
+ DirectX::XMLoadFloat3(reinterpret_cast<const XMFLOAT3*>(&cam.position)));
+ g_View = XMMatrixInverse(nullptr, invView);
+ g_Fov = (cam.fov / 180.0f) * XM_PI;
+ g_ProjectionOffsetX = cam.projectionOffsetX;
+ g_ProjectionOffsetY = cam.projectionOffsetY;
+ updateProjectionMatrix();
+ }
+ else
+ g_World = XMMatrixRotationY(t); // Rotate cube around the origin
+
+ // Clear the back buffer
+ g_pImmediateContext->ClearRenderTargetView(g_pRenderTargetView, Colors::MidnightBlue);
+
+ // Clear the depth buffer to 1.0 (max depth)
+ g_pImmediateContext->ClearDepthStencilView(g_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0);
+
+ // Update matrix variables and lighting variables
+ ConstantBuffer cb1;
+ cb1.mWorld = XMMatrixTranspose(g_World);
+ cb1.mView = XMMatrixTranspose(g_View);
+ cb1.mProjection = XMMatrixTranspose(g_Projection);
+ cb1.vLightDir = XMFLOAT4(-0.577f, 0.577f, -0.577f, 1.0f);
+ cb1.vLightColor = XMFLOAT4(0.453f * g_LightIntensity, 0.714f * g_LightIntensity, 0.105f * g_LightIntensity, 1.0f);
+ cb1.vOutputColor = XMFLOAT4(0, 0, 0, 0);
+ cb1.vTime = t;
+ g_pImmediateContext->UpdateSubresource(g_pConstantBuffer, 0, nullptr, &cb1, 0, 0);
+
+ // Render the cube
+ UINT stride = sizeof(SimpleVertex);
+ UINT offset = 0;
+
+ g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pVertexBuffer, &stride, &offset);
+ g_pImmediateContext->IASetIndexBuffer(g_pIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
+ g_pImmediateContext->VSSetShader(g_pVertexShader, nullptr, 0);
+ g_pImmediateContext->VSSetConstantBuffers(0, 1, &g_pConstantBuffer);
+ g_pImmediateContext->PSSetShader(g_pPixelShader, nullptr, 0);
+ g_pImmediateContext->PSSetConstantBuffers(0, 1, &g_pConstantBuffer);
+ g_pImmediateContext->DrawIndexed(36, 0, 0);
+
+ // Render the HUD only if Ansel session is not active
+ if (!g_AnselSessionIsActive)
+ {
+ g_pImmediateContext->OMSetDepthStencilState(g_pDepthStencilStateDepthDisable, 0);
+ g_pImmediateContext->IASetVertexBuffers(0, 1, &g_pHudVertexBuffer, &stride, &offset);
+ g_pImmediateContext->IASetIndexBuffer(g_pHudIndexBuffer, DXGI_FORMAT_R16_UINT, 0);
+ g_pImmediateContext->VSSetShader(g_pHudVertexShader, nullptr, 0);
+ g_pImmediateContext->PSSetShader(g_pHudPixelShader, nullptr, 0);
+ g_pImmediateContext->DrawIndexed(6, 0, 0);
+ }
+
+ // Present our back buffer to our front buffer
+ g_pSwapChain->Present(0, 0);
+}
diff --git a/samples/AnselSDKIntegration/AnselSDKIntegration.sln b/samples/AnselSDKIntegration/AnselSDKIntegration.sln index 558874c..b8a681b 100644 --- a/samples/AnselSDKIntegration/AnselSDKIntegration.sln +++ b/samples/AnselSDKIntegration/AnselSDKIntegration.sln @@ -1,28 +1,28 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnselSDKIntegration", "AnselSDKIntegration_2015.vcxproj", "{291B6A55-368E-4420-A0EB-FBE077B9F137}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x64.ActiveCfg = Debug|x64 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x64.Build.0 = Debug|x64 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x86.ActiveCfg = Debug|Win32 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x86.Build.0 = Debug|Win32 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x64.ActiveCfg = Release|x64 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x64.Build.0 = Release|x64 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x86.ActiveCfg = Release|Win32 - {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal +
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "AnselSDKIntegration", "AnselSDKIntegration_2015.vcxproj", "{291B6A55-368E-4420-A0EB-FBE077B9F137}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x64.ActiveCfg = Debug|x64
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x64.Build.0 = Debug|x64
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x86.ActiveCfg = Debug|Win32
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Debug|x86.Build.0 = Debug|Win32
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x64.ActiveCfg = Release|x64
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x64.Build.0 = Release|x64
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x86.ActiveCfg = Release|Win32
+ {291B6A55-368E-4420-A0EB-FBE077B9F137}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj b/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj index ef49b24..28a3ba7 100644 --- a/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj +++ b/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj @@ -1,252 +1,252 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>AnselSDKIntegration</ProjectName> - <ProjectGuid>{291B6A55-368E-4420-A0EB-FBE077B9F137}</ProjectGuid> - <RootNamespace>AnselSDKIntegration</RootNamespace> - <Keyword>Win32Proj</Keyword> - <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <GenerateManifest>true</GenerateManifest> - <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'"> - <LinkIncremental>true</LinkIncremental> - <GenerateManifest>true</GenerateManifest> - <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <GenerateManifest>true</GenerateManifest> - <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'"> - <LinkIncremental>false</LinkIncremental> - <GenerateManifest>true</GenerateManifest> - <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <WarningLevel>Level4</WarningLevel> - <Optimization>Disabled</Optimization> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <OpenMPSupport>false</OpenMPSupport> - <IntrinsicFunctions>true</IntrinsicFunctions> - <FloatingPointModel>Fast</FloatingPointModel> - <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <ExceptionHandling>Sync</ExceptionHandling> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <DebugInformationFormat>EditAndContinue</DebugInformationFormat> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>AnselSDK32.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <LargeAddressAware>true</LargeAddressAware> - <RandomizedBaseAddress>true</RandomizedBaseAddress> - <DataExecutionPrevention>true</DataExecutionPrevention> - <TargetMachine>MachineX86</TargetMachine> - <UACExecutionLevel>AsInvoker</UACExecutionLevel> - <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs> - <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories> - </Link> - <Manifest> - <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness> - </Manifest> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <PostBuildEvent> - <Command>xcopy /Y ..\..\redist\AnselSDK32.dll Win32\debug\</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'"> - <ClCompile> - <WarningLevel>Level4</WarningLevel> - <Optimization>Disabled</Optimization> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <OpenMPSupport>false</OpenMPSupport> - <IntrinsicFunctions>true</IntrinsicFunctions> - <FloatingPointModel>Fast</FloatingPointModel> - <ExceptionHandling>Sync</ExceptionHandling> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> - <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>AnselSDK64.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <LargeAddressAware>true</LargeAddressAware> - <RandomizedBaseAddress>true</RandomizedBaseAddress> - <DataExecutionPrevention>true</DataExecutionPrevention> - <TargetMachine>MachineX64</TargetMachine> - <UACExecutionLevel>AsInvoker</UACExecutionLevel> - <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs> - <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories> - </Link> - <Manifest> - <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness> - </Manifest> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <PostBuildEvent> - <Command>xcopy /Y ..\..\redist\AnselSDK64.dll x64\debug\</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level4</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <OpenMPSupport>false</OpenMPSupport> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <FloatingPointModel>Fast</FloatingPointModel> - <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet> - <ExceptionHandling>Sync</ExceptionHandling> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>AnselSDK32.lib;d3d11.lib;d3dcompiler.lib;;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <LargeAddressAware>true</LargeAddressAware> - <RandomizedBaseAddress>true</RandomizedBaseAddress> - <DataExecutionPrevention>true</DataExecutionPrevention> - <TargetMachine>MachineX86</TargetMachine> - <UACExecutionLevel>AsInvoker</UACExecutionLevel> - <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs> - <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories> - </Link> - <Manifest> - <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness> - </Manifest> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <PostBuildEvent> - <Command>xcopy /Y ..\..\redist\AnselSDK32.dll Win32\release\</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'"> - <ClCompile> - <WarningLevel>Level4</WarningLevel> - <Optimization>MaxSpeed</Optimization> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <OpenMPSupport>false</OpenMPSupport> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <FloatingPointModel>Fast</FloatingPointModel> - <ExceptionHandling>Sync</ExceptionHandling> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions> - <AdditionalDependencies>AnselSDK64.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies> - <GenerateDebugInformation>true</GenerateDebugInformation> - <SubSystem>Windows</SubSystem> - <OptimizeReferences>true</OptimizeReferences> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <LargeAddressAware>true</LargeAddressAware> - <RandomizedBaseAddress>true</RandomizedBaseAddress> - <DataExecutionPrevention>true</DataExecutionPrevention> - <TargetMachine>MachineX64</TargetMachine> - <UACExecutionLevel>AsInvoker</UACExecutionLevel> - <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs> - <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories> - </Link> - <Manifest> - <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness> - </Manifest> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <PostBuildEvent> - <Command>xcopy /Y ..\..\redist\AnselSDK64.dll x64\release\</Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="AnselSDKIntegration.cpp" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets" /> +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>AnselSDKIntegration</ProjectName>
+ <ProjectGuid>{291B6A55-368E-4420-A0EB-FBE077B9F137}</ProjectGuid>
+ <RootNamespace>AnselSDKIntegration</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings" />
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
+ <LinkIncremental>true</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir>
+ <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
+ <LinkIncremental>false</LinkIncremental>
+ <GenerateManifest>true</GenerateManifest>
+ <IntDir>intermediate\$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <OpenMPSupport>false</OpenMPSupport>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>AnselSDK32.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <LargeAddressAware>true</LargeAddressAware>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <DataExecutionPrevention>true</DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories>
+ </Link>
+ <Manifest>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
+ </Manifest>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>xcopy /Y ..\..\redist\AnselSDK32.dll Win32\debug\</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|X64'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <OpenMPSupport>false</OpenMPSupport>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <PreprocessorDefinitions>WIN32;_DEBUG;DEBUG;PROFILE;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>AnselSDK64.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <LargeAddressAware>true</LargeAddressAware>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <DataExecutionPrevention>true</DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories>
+ </Link>
+ <Manifest>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
+ </Manifest>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>xcopy /Y ..\..\redist\AnselSDK64.dll x64\debug\</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <OpenMPSupport>false</OpenMPSupport>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>AnselSDK32.lib;d3d11.lib;d3dcompiler.lib;;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LargeAddressAware>true</LargeAddressAware>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <DataExecutionPrevention>true</DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories>
+ </Link>
+ <Manifest>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
+ </Manifest>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>xcopy /Y ..\..\redist\AnselSDK32.dll Win32\release\</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|X64'">
+ <ClCompile>
+ <WarningLevel>Level4</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <OpenMPSupport>false</OpenMPSupport>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <ExceptionHandling>Sync</ExceptionHandling>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x0600;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>../../include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <AdditionalOptions> %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>AnselSDK64.lib;d3d11.lib;d3dcompiler.lib;dxguid.lib;winmm.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Windows</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LargeAddressAware>true</LargeAddressAware>
+ <RandomizedBaseAddress>true</RandomizedBaseAddress>
+ <DataExecutionPrevention>true</DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ <UACExecutionLevel>AsInvoker</UACExecutionLevel>
+ <DelayLoadDLLs>%(DelayLoadDLLs)</DelayLoadDLLs>
+ <AdditionalLibraryDirectories>../../lib</AdditionalLibraryDirectories>
+ </Link>
+ <Manifest>
+ <EnableDPIAwareness>PerMonitorHighDPIAware</EnableDPIAwareness>
+ </Manifest>
+ <PreBuildEvent>
+ <Command>
+ </Command>
+ </PreBuildEvent>
+ <PostBuildEvent>
+ <Command>xcopy /Y ..\..\redist\AnselSDK64.dll x64\release\</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="AnselSDKIntegration.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets" />
</Project>
\ No newline at end of file diff --git a/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj.filters b/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj.filters index bcf807f..ac5233b 100644 --- a/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj.filters +++ b/samples/AnselSDKIntegration/AnselSDKIntegration_2015.vcxproj.filters @@ -1,12 +1,12 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns:atg="http://atg.xbox.com" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Resource Files"> - <UniqueIdentifier>{8e114980-c1a3-4ada-ad7c-83caadf5daeb}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="AnselSDKIntegration.cpp" /> - </ItemGroup> +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns:atg="http://atg.xbox.com" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{8e114980-c1a3-4ada-ad7c-83caadf5daeb}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="AnselSDKIntegration.cpp" />
+ </ItemGroup>
</Project>
\ No newline at end of file diff --git a/samples/AnselSDKIntegration/Shaders.fx b/samples/AnselSDKIntegration/Shaders.fx index abac43c..8c1b4bd 100644 --- a/samples/AnselSDKIntegration/Shaders.fx +++ b/samples/AnselSDKIntegration/Shaders.fx @@ -1,59 +1,59 @@ -cbuffer ConstantBuffer : register( b0 ) -{ - matrix World; - matrix View; - matrix Projection; - float4 vLightDir; - float4 vLightColor; - float4 vOutputColor; - float vTime; -} - -struct VS_INPUT -{ - float4 Pos : POSITION; - float3 Norm : NORMAL; -}; - -struct PS_INPUT -{ - float4 Pos : SV_POSITION; - float3 Norm : TEXCOORD0; -}; - -PS_INPUT VS( VS_INPUT input ) -{ - PS_INPUT output = (PS_INPUT)0; - output.Pos = mul( input.Pos, World ); - output.Pos = mul( output.Pos, View ); - output.Pos = mul( output.Pos, Projection ); - output.Norm = mul( float4( input.Norm, 1 ), World ).xyz; - - return output; -} - -float4 PS(PS_INPUT input) : SV_Target -{ - float4 finalColor = saturate(dot((float3)vLightDir, input.Norm) * vLightColor); - finalColor.a = 1.0f; - return finalColor; -} - -PS_INPUT VS_Hud(VS_INPUT input) -{ - PS_INPUT output = (PS_INPUT)0; - output.Pos = input.Pos; - output.Pos.w = 1.0f; - - if (input.Norm.x > 1.0f) - { - output.Pos.x *= 0.8f * abs(sin(vTime * 0.25f)) + 0.15f; - } - - return output; -} - -float4 PS_Hud(PS_INPUT input) : SV_Target -{ - return float4(0.33f, 0.5f, 0.906f, 1.0f); -} +cbuffer ConstantBuffer : register( b0 )
+{
+ matrix World;
+ matrix View;
+ matrix Projection;
+ float4 vLightDir;
+ float4 vLightColor;
+ float4 vOutputColor;
+ float vTime;
+}
+
+struct VS_INPUT
+{
+ float4 Pos : POSITION;
+ float3 Norm : NORMAL;
+};
+
+struct PS_INPUT
+{
+ float4 Pos : SV_POSITION;
+ float3 Norm : TEXCOORD0;
+};
+
+PS_INPUT VS( VS_INPUT input )
+{
+ PS_INPUT output = (PS_INPUT)0;
+ output.Pos = mul( input.Pos, World );
+ output.Pos = mul( output.Pos, View );
+ output.Pos = mul( output.Pos, Projection );
+ output.Norm = mul( float4( input.Norm, 1 ), World ).xyz;
+
+ return output;
+}
+
+float4 PS(PS_INPUT input) : SV_Target
+{
+ float4 finalColor = saturate(dot((float3)vLightDir, input.Norm) * vLightColor);
+ finalColor.a = 1.0f;
+ return finalColor;
+}
+
+PS_INPUT VS_Hud(VS_INPUT input)
+{
+ PS_INPUT output = (PS_INPUT)0;
+ output.Pos = input.Pos;
+ output.Pos.w = 1.0f;
+
+ if (input.Norm.x > 1.0f)
+ {
+ output.Pos.x *= 0.8f * abs(sin(vTime * 0.25f)) + 0.15f;
+ }
+
+ return output;
+}
+
+float4 PS_Hud(PS_INPUT input) : SV_Target
+{
+ return float4(0.33f, 0.5f, 0.906f, 1.0f);
+}
|